员工类:
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
答案 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()
时,系统会调用Employee
类toString
方法,现在它将返回您在覆盖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();
}