10

従業員クラス:

public class Employee {

    int empid;
    String name;
    int age;

    public Employee(int empid,String name,int age)
    {
        this.empid=empid;
        this.name=name;
        this.age=age;
    }
    public int getEmpid() {
        return empid;
    }
    public void setEmpid(int empid) {
        this.empid = empid;
    }
    public String getname() {
        return name;
    }
    public void setname(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    } 
}

コンパレータクラス:

public class Employee_comparator implements Comparator<Employee> {

    @Override
    public int compare(Employee object1, Employee object2) {
        return object1.getname().compareTo(object2.getname());
    }
}

メインクラス:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class Employee_Main {

    /**
     * @param args
     */
    public static void main(String[] args) {

        List<Employee> list=new ArrayList<Employee>();

        list.add(new Employee(33186,"varun",23));
        list.add(new Employee(33187,"deepak",23));
        list.add(new Employee(33188,"apple",23));
        list.add(new Employee(33189,"rohan",23));

        Collections.sort(list,new Employee_comparator());

        for(int i=0;i<list.size();i++) {

            System.out.print("age:"+list.get(i).getAge());
            System.out.print("empid:"+list.get(i).getEmpid());
            System.out.println("name:"+list.get(i).getname());
        }

        Iterator<Employee> itr=list.iterator();

        while(itr.hasNext())
        {
            System.out.println(itr.next());
        }
    }
}

getメソッドを使用して印刷しようとすると、正常に機能しています。しかし、を使用してリストの要素を印刷しようとするとIterator、次の出力が得られます。

new_.Employee@28122812new_.Employee@280d280dnew_.Employee@28172817new_.Employee@28082808
4

7 に答える 7

10

toString()クラスにメソッドを実装できますEmployee

public String toString(){
    return "Name: "+ this.name
       + ". Age:"+ this.age
       + ". Id:"+ this.empId; 
} //example

このようにすると、次のようになります。

System.out.println(itr.next());

従業員の、 、nameを出力しますageid

于 2012-11-01T10:06:44.853 に答える
5

あなたがそこに持ってitr.next()いるクラスのオブジェクトを返すEmployeeからです。試す

    Iterator<Employee> itr=list.iterator();

    while(itr.hasNext())
    {
        Employee employee = itr.next();

        System.out.print("age:"+employee.getAge());
        System.out.print("empid:"+employee.getEmpid());
        System.out.println("name:"+employee.getname());
    }
于 2012-11-01T10:07:43.820 に答える
4

その値ではなく、Employee クラス オブジェクトを出力しています。

試す :

Iterator<Employee> itr=list.iterator();

while(itr.hasNext())
{
    //System.out.println(itr.next());
    System.out.println(itr.next().getEmpid());
}

間、強化された for ループを使用すると、イテレータよりも高速になります。

編集:

強化された for ループは、Iterator よりも読みやすくなっています。一方、Iterator には、 iterator.remove() メソッドを使用して値を削除するオプションがあります。ループ中にリストを更新しようとすると、 for ループは ConcurrentModificationException をスローします。

于 2012-11-01T10:04:46.323 に答える
2

メソッドが呼び出されても詳細toStringを取得できるように、メソッドをオーバーライドします。EmployeetoString

public void toString(){
 return "Employee Id: "+empid+" Name: "+name+" Age: "+age;
}

クラスメソッドを呼び出すとitr.next()、オーバーライドされたメソッドで作成した が返されます。EmployeetoStringStringtoString

于 2012-11-01T10:07:31.370 に答える
1

あなたの itr. next() には従業員オブジェクトが含まれており、 toString() メソッドを出力します。String メソッドをオーバーライドしていないため、これが得られます。必要に応じて String メソッドにオーバーライドできます。

System.out.println(itr.next());

toString() メソッドでそれが何であるかを出力します。

これは Employee クラスになります

 @Override
public String toString() {
    return "Employee [empid=" + empid + ", name=" + name + ", age=" + age + "]";
}
于 2012-11-01T10:08:37.273 に答える