[英]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.