さて、もう 1 つ問題を解決する必要があります。私のハッシュマップコードは、追加/削除/変更/印刷/ソート(多少)を行います。並べ方の問題です。姓の昇順でソートされます。2 人の従業員の姓が同じ場合は、名の昇順に進みます。ただし、問題は、2 人の従業員の名前が同じ場合、ID 番号で並べ替える必要がありますが、そうではありません。
私のコード: 2 人の従業員の氏名が同じで ID 番号が異なる場合、ID 番号が小さい従業員のみを出力し、リストから他の従業員を省略します。問題は、どうすればそれを修正できるかということです。また、このコードを修正する必要がある場合、私の従業員ファイルは? これが私の従業員コードです。ヒント/リンク/アドバイスは役に立ちます。
public class Employee implements Comparable {
private String firstName;
private String lastName;
private int id;
private int perfScale;
Employee() {
firstName = "";
lastName = "";
id = 0;
perfScale = 0;
}
Employee(String lastName, String firstName, int id, int perfScale){
this.firstName = firstName;
this.lastName = lastName;
this.id = id;
this.perfScale = perfScale;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public int getId() {
return id;
}
public void setId(int id){
this.id = id;
}
public int getPerfScale() {
return perfScale;
}
public void setPerfScale(int perfScale){
this.perfScale = perfScale;
}
public boolean equals(Object o) {
if(o instanceof Employee)
return(getLastName() == ((Employee) o) .getLastName()) &&
(getFirstName() == ((Employee)o) .getFirstName());
else
return false;
}
public int compareTo(Object o) {
Employee e = (Employee) o;
int performance1 = e.getPerfScale();
int performance2 = this.getPerfScale();
if(performance1 < performance2) {
return 1;
} else if(performance1 > performance2) {
return -1;
} else {
return this.getLastName().compareTo(e.getLastName());
}
}
public int hashCode() {
int h1 = firstName.hashCode();
int h2 = lastName.hashCode();
int h3 = new Integer(id).hashCode();
final int HASH_MULTIPLIER1 = 29;
final int HASH_MULTIPLIER2 = 19;
final int HASH_MULTIPLIER3 = 17;
int h = HASH_MULTIPLIER1 * h1 + HASH_MULTIPLIER2 * h2 + HASH_MULTIPLIER3 * h3;
return h;
}
public String toString()
{
return getLastName() + ", " + getFirstName() + " ," + getId() + " rating: " + getPerfScale()+ " Performance Scale";
}
}
ここで、名前の昇順での並べ替えを処理する場合のコードを示します。コード全体は私が印刷したコードよりも長いので、ソートを生成するケースのみを印刷します。
public static void printLastNameAscending(TreeMap<String, Employee> LastName,
TreeMap<Integer, Employee>idNumber) {
Set Employee1 = LastName.entrySet();
Set Employee2 = idNumber.entrySet();
Iterator itr1 = Employee1.iterator();
Iterator itr2 = Employee2.iterator();
while (itr1.hasNext() && itr2.hasNext()) {
Map.Entry me = (Map.Entry) itr1.next();
Map.Entry be = (Map.Entry) itr2.next();
System.out.print(me.getKey()+ " ID: ");
System.out.println(be.getKey());
}
}