[英]How to iterate Class Object from an ArrayList iterator
public class EmpArray {
private int id;
private String name,address;
EmpArray(int id, String name, String addr)
{
this.id = id;
this.name = name;
address = addr;
}
int getId()
{
return id;
}
void display()
{
System.out.println("Employee details are ---");
System.out.println("Id - "+id);
System.out.println("Name - "+name);
System.out.println("Address - "+address);
}
}
在main()中,我创建了一个ArrayList来存储EmpArray类对象我的意图是,不存储重复的Id ..
import java.util.*;
import java.io.*;
public class EmpArrayList {
/**
* @param args
* @throws IOException
* @throws NumberFormatException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String name,address;
int id;
//Create ArrayList
ArrayList<EmpArray> arl = new ArrayList<EmpArray>();
//Attach iterator to ArraList to check if Id is already added!!
Iterator it = arl.iterator();
enter:
{
for(int i =0 ; i < 3; i++)
{
System.out.println("Enter Id:");
id = Integer.parseInt(br.readLine());
while(it.hasNext())
{
EmpArray temp = (EmpArray) (it.next());
if(id == temp.getId())
{
System.out.println("Id already exists! Add another Id : ");
break enter;
}
}
System.out.println("Enter Name:");
name = br.readLine();
System.out.println("Enter Address:");
address = br.readLine();
//Create an object of EmpArray Class
EmpArray e = new EmpArray(id,name,address);
//Add this EmpArray object to the ArrayList
arl.add(e);
}
}
//Now display all the elements stored in the ArrayList
/*for(int i=0 ; i< 3; i++)
{
EmpArray ea = arl.get(i);
ea.display();
}*/
//Get Id from the user and display only that employee's details
System.out.println("Enter Id whose details are required? : ");
int searchId = Integer.parseInt(br.readLine());
boolean isIdAvailable = false;
for(int i = 0; i < 3 ; i++)
{
EmpArray ea = arl.get(i);
if(searchId == ea.getId())
{
ea.display();
isIdAvailable = true;
break;
}
}
if(!isIdAvailable)
System.out.println("Employee details are not available");
}
}
当我第二次尝试输入Id时出现异常。 异常是在it.next()异常是并发修改异常有人可以帮助我为什么有这个异常?
你正在遍历数组列表ArrayList<EmpArray> arl
,之后你正在改变它的状态arl.add(e);
通过向其中添加值来修改它,这就是ConcurrentModificationException
的原因。 如果可能,使用另一个数组列表将修改后的内容添加到其中
但是,您有重复内容的问题,为什么不使用Set
和Comparator
或Comparable
。
考虑在自定义对象中实现hashCode和.equals(),而不是创建自己的重复安全机制。 这样,您可以在ArrayList上轻松使用.contains以避免重复。
这是关于此类实现的一个很好的文档: http : //www.programcreek.com/2011/07/java-equals-and-hashcode-contract/
假设现在您知道为什么要获得该异常,一个简单的方法就是不使用迭代器,而是使用简单的for循环。
// Attach iterator to ArraList to check if Id is already added!!
// Iterator it = arl.iterator();
enter: {
for (int i = 0; i < 3; i++) {
System.out.println("Enter Id:");
id = Integer.parseInt(br.readLine());
for (i = 0; i < arl.size(); i++) {
EmpArray temp = (EmpArray) (arl.get(i));
if (id == temp.getId()) {
System.out
.println("Id already exists! Add another Id : ");
break enter;
}
}
System.out.println("Enter Name:");
name = br.readLine();
System.out.println("Enter Address:");
address = br.readLine();
// Create an object of EmpArray Class
EmpArray e = new EmpArray(id, name, address);
// Add this EmpArray object to the ArrayList
arl.add(e);
}
}
谢谢大家的投入! 我现在明白为什么我有这样的例外。
我也明白Set是为了避免重复,但我的目的是使用ArrayList并处理它中的重复项! 我现在不是使用迭代器而是一个简单的循环!
再次感谢你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.