2012-02-26 42 views
1

真正基本的OO理解問題我遇到了,任何幫助都非常感謝。將唯一對象實例添加到ArrayList中

我試圖每次按下按鈕時將「事情」的實例添加到數組列表中,我無法圍繞如何創建唯一實例來添加到列表中。不同的按鈕按下應該從列表中刪除最近的對象。

ArrayList myList = new ArrayList<Thing>(); 
if(input.isKeyPressed(Input.KEY_A)){ 
      Thing myThing = new Thing(); 
      myThing.setNumber(myList.size()); 
      myList.add(myThing); 
     } 

if(input.isKeyPressed(Input.KEY_R)){ 
      if(myList.size()>0){ 
       myList.remove(myList.size()-1); 
      } 
     } 

如果我打算做很多「東西」,我不關心他們叫什麼(我也不想要跟蹤的獨特的東西,對象名稱)。我怎樣才能在每次按下按鍵時創造一個獨特的「事物」對象,而且痛苦最小。

UPDATE: 感謝您的意見,請讓我努力闡明我的問題比較好... 當我創建一個完整的「東西」,ArrayList中的其中的每個實例被稱爲「myThing」,每個實例有相同的實例變量值。

如果我想要一些'物品'有boolean isVisable = true,其他的有boolean isVisable = false。由於列表中的每個元素都具有相同的名稱,所以我陷入困境。

+3

上述代碼有什麼問題? – 2012-02-26 21:03:11

+1

我也不明白。你的問題到底是什麼?如果你想要它獨特的,那麼也許嘗試哈希方法?這是你想要的嗎?我不確定,謝謝。 – tester 2012-02-26 21:04:16

+2

你每次做'new Thing()'時都會創建一個'Thing'的獨特實例。你需要澄清一下你的問題來說明你的問題。 – 2012-02-26 21:08:42

回答

2

確保事情正確實現equals和hashCode,然後存儲在一個Set集合(即HashSet的)的實例。通過hashCode()和equals()的實現,Thing的兩個實例是完全相同的,因此您將能夠以任何您需要的方式實施唯一性。

現在這裏的訣竅是實現hashCode()和equals()並不是完全無關緊要的,但是如果你打算使用Java,你需要知道如何去做。因此請閱讀Effective JAva的appropriate chapter(或者更好地閱讀整本書)。

+0

感謝您的答案和鏈接,而我已閱讀並理解「Head First Java 「,我的理解肯定不及總數。有更多的時間學習。 – Reustonium 2012-02-26 23:04:04

+1

那麼,如果你現在的Java經驗是「Head First Java」,那麼「Effective Java」可能有點不成熟。這是一個非常嚴肅的文本,這將要求您瞭解許多有關該語言的核心細節。 – 2012-02-27 04:01:34

+0

你可以推薦跟進'頭第一個java'嗎?再次感謝。 – Reustonium 2012-02-27 14:32:47

0

試試這個:

$ cat Thing.java 
import java.util.*; 
public class Thing{ 
     UUID id; 
     Thing() { 
       id = UUID.randomUUID(); 

     } 

     public String toString(){ 
       return id.toString(); 

     } 

     public static void main(String[] argv) { 
       Thing t = new Thing(); 

       System.out.println(t); 
     } 
} 


$ javac Thing.java && java Thing 
08bb3702-84d3-4bc3-b8ab-bb52b90b8f78