2013-08-07 108 views
1

我有一個ArrayList,它存儲對象Foo當ArrayList頻繁更改時訪問特定的ArrayList元素

比方說,我要添加對象Foo的10至ArrayList,我會做類似如下:

for (int i = 0; i <10 ; i++){ 
    arraylist.add(new Foo()); 
} 

雖然這種解決方案的工作,問題是,我該如何訪問,說第九Foo,第三名和第四名Foo從陣列列表中被刪除後?

我不能簡單地做

arraylist.get(9); 

了,因爲這會丟IndexOutOfBoundsException

我希望能夠使程序動態地做到這一點,因爲在我的情況下,Foos的數量不是固定的,並且可以隨時刪除它們。

+0

@Reimeus有沒有辦法動態地做到這一點?因爲在我的程序中,Foos的數量不是固定的。 – user2519193

+0

@ user2519193:完全取決於你想要做什麼。如果你只想要最後一個,那很簡單。如果你想讓某個索引忽略刪除,你應該設置爲null而不是刪除。 – SLaks

回答

2

你需要有特定的順序的項目,你可能不會永遠記住這富插入該指數爲這是一個Map<Integer, Foo> is perfect.

Map<Integer,Foo> map = new HashMap<Integer, Foo>(); 
map.put(1, new Foo()); 
map.put(2, new Foo()); 
etc 

%的意見,map = TreeMap<Integer, Foo>()可能會更好。

+0

HashMap不保留廣告訂單。 TreeMap更好。 – CPerkins

+0

謝謝,符合我的需求,我不應該使用ArrayList動態地執行任務。 對於其他人,抱歉!我誤解了我的問題,所以大家仍然在技術上正確回答! – user2519193

+0

是的,這是真正的CPerkins,但是如果你遍歷鍵集,你會按順序得到它們,儘管不是最優的。 – arynaq

0
arraylist.get(8 - numberOFDeletedElements); 

8不是9,因爲索引中,開始時0和9號元素開始(在刪除之前)具有指數8

arraylist.get(arraylist.size() - 2); 

你可能不需要這個的。由於所有對象都是相同的。如果它們是不同的,那麼你可能需要遍歷數組,並檢查要找到一個元素

+0

如果他在要訪問的元素之後刪除元素,則不起作用。 – SLaks

0

Foo創建一個equalTo()方法比使用ArrayList 方法的條件。

+0

你的意思是'equals()'? – Joe

1

如果你只關心最後一個元素,你可以永遠只是做

arraylist.get(arraylist.size() - 1)