2012-02-26 4 views
1

정말 기본적인 OO 이해 문제 내가 실행 중입니다. 어떤 도움도 크게 받으실 수 있습니다.ArrayList에 고유 한 객체 인스턴스 추가

버튼을 누를 때마다 arraylist에 "Thing"의 인스턴스를 추가하려고합니다. 목록에 추가 할 고유 인스턴스를 작성하는 방법에 대해 머리를 감쌀 수 없습니다. 다른 버튼을 누르면 가장 최근의 개체가 목록에서 제거됩니다.

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); 
      } 
     } 

나는 "일"을 많이 만들 계획이라면 그리고 나는 그들이 불리는 것에 대해 걱정하지 않는다 (도 내가 유일한 것 - 개체 이름을 추적 싶어). 최소한의 통증으로 각 버튼 누르기에 고유 한 '물건'개체를 어떻게 만들 수 있습니까?

업데이트 : 덧글에 대한 감사합니다, 제가 "myThing"라고 각 인스턴스에있는 '것'의 전체 ArrayList에를 만들 때 ... 더 나은 을 내 질문에 명확하게하려고 주시기 바랍니다, 모든 인스턴스가 가지고있는 동일한 인스턴스 변수 값.

'씽'의 일부가 boolean isVisable = true이고 기타가 boolean isVisable = false 인 경우. 목록의 각 요소가 같은 이름을 가지고 있기 때문에 나는 고생한다.

+3

위 코드의 문제점은 무엇입니까? –

+1

나는 그것을 얻지도 않는다. 당신의 문제는 정확히 무엇입니까? 고유 한 경우 해시 방법을 시도해보십시오. 이게 니가 원하는거야? 나는 잘 모르겠다. – tester

+2

당신은'new Thing()'을 할 때마다 'Thing'의 유일한 인스턴스를 생성하고 있습니다. 문제가 무엇인지 설명하기 위해 질문을 명확히해야합니다. –

답변

2

그 것은 부가 equals와 hashCode를 제대로 구현되었는지 확인하고 다음 세트 모음 (즉, HashSet의)의 인스턴스를 저장합니다. hashCode()와 equals()의 구현을 통해, Thing의 두 인스턴스가 동일하고 따라서 필요한 방식으로 고유성을 강화할 수 있습니다.

여기에있는 속임수는 hashCode() 및 equals()를 구현하는 것이 완전히 간단한 것은 아니지만 Java를 사용할 계획이라면 어떻게해야 하는지를 알아야합니다. 따라서 appropriate chapter의 Effective JAVA를 읽으십시오 (또는 전체 책을 더 잘 읽으십시오).

+0

답변과 링크를 제공해 주셔서 감사 드리며 "Head First Java "내 이해력은 확실히 합계보다 적습니다. 더 공부할 시간. – Reustonium

+1

글쎄,이 시점에서 당신의 모든 Java 경험이 "Head First Java"라면, "Effective Java"는 시기상조 일 수 있습니다. 매우 중요한 텍스트로, 언어에 대한 많은 핵심 핵심 내용을 이해해야합니다. –

+0

'head first java'의 후속 조치를 권장 할 수 있습니까? 다시 한 번 감사드립니다. – Reustonium

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