将唯一对象实例添加到ArrayList中

时间:2012-02-26 21:01:29

标签: java oop arraylist

我遇到了真正基本的OO理解问题,非常感谢任何帮助。

我试图添加" Thing"每次按下一个按钮,我都会围绕一个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);
            }
        }

如果我打算制作很多东西&#34;而且我不关心他们被称为什么(我也不想跟踪独特的事物对象名称)。我怎样才能创造一个独特的东西&#39;按下每个按钮上的物体,疼痛极小。

更新: 感谢您的评论,请让我试着更好地表达我的问题...... 当我创建一个完整的&#39; Thing&#39;,其每个实例被称为&#34; myThing&#34;时,每个实例都具有相同的实例变量值。

如果我希望某些“事情”有boolean isVisable = true,而其他人要boolean isVisable = false。我被卡住了,因为列表中的每个元素都具有相同的名称。

2 个答案:

答案 0 :(得分:2)

确保Thing正确实现equals和hashCode,然后将实例存储在Set集合(即HashSet)中。通过hashCode()和equals()的实现,完全取决于你的两个Thing实例是相同的,因此你将能够以任何你需要的方式强制执行唯一性。

现在的诀窍是实现hashCode()和equals()并不是完全无关紧要的,但是如果你打算使用Java,你需要知道如何去做。请阅读有效JAva的appropriate chapter(或者更好地阅读整本书)。

答案 1 :(得分: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