如何使用Iterator打印列表(员工类型)?

时间:2012-11-01 10:01:28

标签: java iterator

员工类:

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

7 个答案:

答案 0 :(得分:9)

您可以在班级toString()中实施方法Employee

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

这样,当你这样做时:

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

它将打印姓名,年龄和员工的身份证件

答案 1 :(得分:3)

您正在打印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。

答案 2 :(得分:3)

因为itr.next()返回了您存储在其中的类Employee的Object。 试试

    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());
    }

答案 3 :(得分:2)

覆盖toString方法,以便即使调用Employee方法也可以获取toString详细信息。

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

现在,当您致电itr.next()时,系统会调用EmployeetoString方法,现在它将返回您在覆盖String中创建的toString方法

答案 4 :(得分:1)

你的itr.next()包含employee对象,它将打印toString()方法。由于你没有覆盖String方法,你得到了这个。您可以根据需要覆盖到String方法并

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

将打印toString()方法中的内容。

这将在您的员工类

 @Override
public String toString() {
    return "Employee [empid=" + empid + ", name=" + name + ", age=" + age + "]";
}

答案 5 :(得分:1)

您可以使用下面的代码

在Java 8中执行相同的操作

Iterator<Employee> employees = list.iterator(); employees.forEachRemaining(System.out::println);

或简单地说,

list.iterator.forEachRemaining(System.out::println);

答案 6 :(得分:0)

你应该在你的类中添加一个 Employee 方法:

public void printEmploee()
{
  System.out.printf("ID:%s \nName: %s \nAge: %s \n",
  this.id, this.name, this.age);
}

然后使用迭代器:

Iterator<Employee> itr = list.iterator();
while (itr.hasNext()) {
itr.next().printEmploee();
}