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

Her*_*les 9 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;
    } 
}
Run Code Online (Sandbox Code Playgroud)

比较类:

public class Employee_comparator implements Comparator<Employee> {

    @Override
    public int compare(Employee object1, Employee object2) {
        return object1.getname().compareTo(object2.getname());
    }
}
Run Code Online (Sandbox Code Playgroud)

主要课程:

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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用get方法进行打印时,它工作正常.但是,当我尝试使用列表打印元素时Iterator,它会给出以下输出:

new_.Employee@28122812new_.Employee@280d280dnew_.Employee@28172817new_.Employee@28082808
Run Code Online (Sandbox Code Playgroud)

Ren*_*tti 9

您可以toString()在类中实现一个方法Employee:

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

这样,当你这样做时:

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

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

  • 不需要显式的`toString()`调用,无论如何都会调用override` toString()`. (5认同)

Yag*_*ola 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());
    }
Run Code Online (Sandbox Code Playgroud)


Ank*_*kit 4

您正在打印 Employee 类对象而不是它的值,

尝试 :

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

while(itr.hasNext())
{
    //System.out.println(itr.next());
    System.out.println(itr.next().getEmpid());
}
Run Code Online (Sandbox Code Playgroud)

之间,使用增强的for循环,它比迭代器更快。

编辑:

增强的 for 循环比 Iterator 更具可读性。而 Iterator 为您提供了使用 iterator.remove() 方法删除值的选项。如果您尝试在循环期间更新列表,for 循环会抛出 ConcurrentModificationException。