2012-02-26 95 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