0

Employee.java という名前の pojo を開発しました。今、私はそれをユーザー定義コレクションとして作成することを計画していました。マップを作成し、従業員タイプのオブジェクトをすべて格納したいと考えています。

以下は私のポジョです

    public class Employee {     
     String name,job;
     int salary;


     public Employee(String n , String j, int t ) //constructor
     {
         this.name= n;
         this.job=j;
         this.salary= t; 

     } 

     @Override
     public int hashCode()
     {       
         return name.hashCode()+job.hashCode()+salary;       

     }
     @Override
        public boolean equals(Object obj) {  

         Employee e = (Employee) obj;   
         return this.name.equals(e.name)&&this.job.equals(e.job)&&this.salary==e.salary;
     }


}

今、マップを含み、従業員タイプのオブジェクトを格納する別のクラスを開発しました..

   public static void main(String[] args)
        {           
        Map employeeMap = new HashMap();
        Employee e = new Employee("Saral", "Trainer", 34000);
        Employee e1 = new Employee("Sarall", "saral", 34090);
        employeeMap.put("S", e);
        employeeMap.put("S1", e);
        System.out.println(employeeMap.size());
        Set s = employeeMap.entrySet();

        Iterator it = s.iterator();
        while(it.hasNext())
        {           
            Map.Entry m =(Map.Entry)it.next();
            System.out.println(m.getKey()+"\t"+m.getValue());

        }

しかし、実行しようとすると、従業員の詳細を取得したいのですが、画面にオブジェクトが表示されます...従業員の値を確認したいのですが、従業員オブジェクトから値を取得する方法を教えてください。

2
S   CollectionsPrac.Employee@285c2854
S1  CollectionsPrac.Employee@285c2854
4

4 に答える 4

3

toString次に、Employeeクラスのメソッドをオーバーライドする必要があります。

public String toString() {
    return name + " [" + job + "] - salary: " + salary;
}

ちなみに、あなたは置き換えることができます:

    Iterator it = s.iterator();
    while(it.hasNext())
    {           
        Map.Entry m =(Map.Entry)it.next();
        System.out.println(m.getKey()+"\t"+m.getValue());

    }

System.out.println(s.toString());

本当に出力をタブで区切る必要がない限り。

于 2012-04-15T17:09:56.363 に答える
1

toString()Employeeのメソッドをオーバーライドする必要があります

@Override pulic String toString() {
    return name + " " + job;
}
于 2012-04-15T17:09:36.300 に答える
1

初めに。ハッシュコードが壊れています。これを実行してみてください:

        System.out.println("Should be false: " + (new Employee("Sara", "Trainer", 1).hashCode() == new Employee("Trainer", "Sara", 1).hashCode()));

IDE (Eclipse など) を使用している場合は、equals メソッドと hashcode メソッドを自動的に生成する関数があり、次のような結果が得られます。

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((job == null) ? 0 : job.hashCode());
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + salary;
    return result;
}



@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Employee other = (Employee) obj;
    if (job == null) {
        if (other.job != null)
            return false;
    } else if (!job.equals(other.job))
        return false;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    if (salary != other.salary)
        return false;
    return true;
}

あなたの主な方法については..ジェネリック(<>内のもの)に関するいくつかの基本を学ぶようにしてください。最初は細かな詳細は必要ありません。リストとマップでの使用方法を学ぶだけで、あなたの生活がずっと楽になります。特にあなたの使用とIDE以来...

これは、メイン メソッドのリファクタリングされたバージョンです。

public static void main(String[] args)
    {           
        Map<String, Employee> employeeMap = new HashMap<String, Employee>();
        Employee e = new Employee("Saral", "Trainer", 34000);
        Employee e1 = new Employee("Sarall", "saral", 34090);
        employeeMap.put("S", e);
        employeeMap.put("S1", e1);
        System.out.println(employeeMap.size());
        Set<Entry<String, Employee>> entrySet = employeeMap.entrySet();
        for (Entry<String, Employee> entry: entrySet) {
            System.out.println(entry.getKey()+"\t"+entry.getValue().name);
        }

        System.out.println("Should be false: " + (new Employee("Sara", "Trainer", 1).hashCode() == new Employee("Trainer", "Sara", 1).hashCode()));
    }
于 2012-04-15T17:23:10.243 に答える
0

これをで変更します

Iterator it = s.iterator();
while(it.hasNext())
{           
  Map.Entry m =(Map.Entry)it.next();
  Employee empl = (Employee) m.getValue();
  System.out.println(m.getKey()+"\t"+empl.name);
}

あなたが線で見ることができるように

Employee empl = (Employee) m.getValue();

値はオブジェクトに「キャスト」され、変数のEmployee操作を開始して、すべてのクラスメソッドとメンバーを使用できます。emplEmployee

于 2012-04-15T17:09:47.377 に答える