2009-02-28 34 views
1

Bu, muhtemelen çok basittir, ancak Google'da doğru şekilde kelime edemedim. Her iş parçacığı için bilgileri tutan bir ArrayList var. Her iş parçacığının kendi kimliği vardır. Ben bilgi istediğinizdeBoş izinli Java Listesi

myList.add(theIdOfTheThread, new InfoForTheThread()); //Add new thread info at index theIdOfTheThread 

Ve: Yani, başlangıçta

myList.get(myId); //The info for the thread 

bir alt iplik bitirir ve girişini, vb Yani ne zaman çıkarsa Ama, hep OutOfRangeExceptions olsun, orada eminim Bunun için kullanacağım daha iyi bir sınıf olmalı, istediğim herhangi bir dizine girişi koyabiliyorum ve istediğim bir dizine çekip kalıyorum.

cevap

9

Bu tür bir erişim için gerçekten bir dizi veya daha iyisi HashMap kullanmalısınız. Bunun için bir liste kullanmak çok verimsiz ve gereksiz bir şekilde karmaşıktır. Bir öğeyi listenin ortasından çıkarırsanız, her şey aşağı iner ve kaldırdığınızın üzerindeki tüm endeksler aşağı doğru hareket etmeyi gerektirir.

Bir dizi InfoForTheThread bu sorunu yaşamayacaktır, ancak başlamadan önce ihtiyacınız olan dizinin boyutunu bilmeniz gerekir.

Bunun yerine bir HashMap kullanın - anahtarlar için Integers kullanabilirsiniz ve kaldırma işlemi bir sonuç vermeyle sonuçlanmayacaktır.

HashMap<Integer,InfoForTheThread> myInfos = new HashMap<Integer,InfoForTheThread>(10); 

alarak ve bunları bir giriş çıkarmadan, ekleme:

myInfos.put(Integer.valueOf(4), new InfoForTheThread()); 
InfoForTheThread infoForFour = myInfos.get(Integer.valueOf(4)); 
InfoForTheThread infoForFour = myInfos.remove(Integer.valueOf(4)); 
+0

Yine de java 1.5 kullandığınız için, neden otomatik boksu/kutucukluğu kullanmıyorsunuz? – Bogdan

+0

Alışkanlık gücü. Otomatik kutuda çalıştığım yerde zararlı olarak kabul edilir ve derleyicide bir hatayı işaret edecek şekilde ayarlanır. – banjollity

3

Bir hashtable deneyin. İş parçacığı kimliğini anahtar olarak kullanabilir ve ardından bilgilerinizi değer olarak ekleyebilirsiniz.

+0

Katılıyorum. Örnek olarak: Hashtable iş parçacığı = new Hashtable // depolamak iş parçacığı bilgisi kimliği threads.put (threadId, threadInfo); // konu bilgisini atla threads.get (threadId); // –

+1

kimliğine sahip bir iplik yoksa null olacaktır. Her şeyin senkronize edilmesini gerektiren bazı ezoterik iş parçacığı endişeleriniz olmadıkça * Java * Hashtable sınıfını asla kullanmayın. Bunun yerine her zaman HashMap'i kullanın (gerekirse, senkronize edilmiş bir sarıcı kullanabilirsiniz). – MetroidFan2002

İlgili konular