2012-05-09 4 views
2

ArrayList에 일련의 객체를로드하고 나중에 추가 된 위치의 색인을 반환하여 나중에 ArrayList에서 직접 사용할 수있게하려고합니다. . 그래픽에 5 개의 프레임 세트를로드하고 프레임 3의 데이터를 목록에서 직접 호출하는 것은 필자와 비슷할 것입니다.
관련성이있는 몇 가지 잠재적 인 게시물을 둘러 보았을 때, 나는 관련있는 것을 발견하고 궁금해하게했습니다. 최근에 추가 된 객체의 색인을 가져 오는 기능이 내장되어 있습니까?방금 ​​Java/Android의 ArrayList에 추가 한 객체의 색인을 가져옵니다.

나는 그에서 찾고 링크는 내가 이런 생각하게했다 :

private ArrayList<FrameData> mylistofframeshere = new ArrayList(); 
    FrameData Framenumberone = new FrameData(constructorblah goes in here); 
    int wherediditgo = mylistofframeshere.add(Framenumberone); 
: ArrayList indexOf() returns wrong index?

기본적으로, 나는 그것을보고 있던 방법 나는 다음과 같은 psuedocode의 라인을 따라 뭔가를 할 것이라고했다

이 아니면 내가 좀 더 절차이 시점에서 기반으로 코딩

mylistofframeshere.getindex(Framenumberone); 

내 배경의 라인을 따라 뭔가를 할 수 있다고 생각, 그래서 인덱스가 무엇인지를 아는 데 더 익숙합니다. 단지 데이터를 배치하기 위해서입니다. 나는 위의 링크와 비슷한 것을 발견하고 오라클 문서를 둘러 보았습니다. 어떤 제안 ??

편집 : 예와 설명에 충분한 노력을 기울이지 않았으므로 여기에 몇 가지 추가 설명을 추가하겠습니다.

목록의 직접 색인과 같은 것을 사용하려는 또 다른 예는 내가 게임이나 무언가를 위해 지형으로 사용하고 싶었던 타일 세트를 가지고있을 것입니다. 영역의 가능한 타일 집합을 중앙 ArrayList에로드합니다. 이 타일을 배치하려고하면 적절한 비트 맵을 그리기 위해 ArrayList에있는 미리로드 된 객체를 참조합니다.

저는 아직도 Java에 익숙하지 않으므로 이러한 데이터 유형을 사용하는 방법에 대해 간과 할 수는 없습니다. 나는 설명을 올바르게 할 때까지 이것을 계속 편집 할 것이다.

답변

6

ArrayList에 항목을 추가하면 사용 가능한 마지막 공간으로 이동합니다. 즉 :

List<FrameData> list = new ArrayList<FrameData>(); 
list.add(frame1); 

FrameData frame = list.get(list.size() - 1); //frame == frame1 

하지만 왜 그렇게해야하는지 궁금합니다. 달성하려는 내용에 대해 더 자세히 설명하면 동일한 결과를 얻는 다른/더 좋은 방법이있을 수 있습니다. ArrayList.indexOf(object); 같은 방법이 있습니다

+0

시작과 관련하여 많은 도움이됩니다. 따라서 배열에로드 된 객체의 색인이나 직접 참조를 얻는 직접적인 반환이나 방법은 없습니다. 아마 나는이 것들의 적절한 사용법을 오해 할 것입니다. 둘째, 답변에 응답하기 위해 기본 게시물을 약간 편집하여 약간 명확하게했습니다. 다행히 이제는 더 이해할 수있을 것입니다. 지금까지 정보를 가져 주셔서 감사합니다! –

+0

해시 맵 사용을 고려 했습니까? 'map.put ("black tile", blackTile); 그리고 나중에'tile = map.get ("black tile");을 사용하여 그 타일을 다시 얻을 수 있습니다. – assylias

+0

다중 작업자 스레드가 자신의 비트 맵을 생성하기 위해 단순히 데이터에 액세스하려는 경우이 방법이 유용할까요? 주제에 대한 Google 문서를 읽는 중에 이것이 갈 길이 될 것으로 보입니다. –

2

는, 그것은 모두 당신을위한 인덱스를 사용하려는 작업에 따라 개체

+0

이것은 처음으로 발견 된 객체 인스턴스 만 반환합니다. 그 유형의 객체의 특정 인스턴스를 찾아야합니다. 예를 들어 화면에 같은 유형의 몬스터 목록이 있다면 어떻게 특정 몬스터를 골라 낼 수 있습니까? 그 몬스터가 다른 몬스터들이 죽을 때까지 무적 상태로 만들고 싶다고 말하면, 목록에있는 몬스터가 무엇인지 알 필요가 있습니다. 그래서로드시에 그리고 조건이 충족 된 후에 몬스터를 올바르게 설정할 수 있습니다. –

+1

몬스터 객체의 속성이어야하며 목록 자체와 관련이 없어야합니다. 그래서 이것을 달성하기 위해 Monster 클래스에 'private boolean invincible'속성을 추가합니다. 그런 다음 재정의 된 equals 메서드에서이 조건을 확인해야합니다. 이렇게하면 ArrayList.indexOf (object)는 찾고있는 Monster의 인스턴스를 반환합니다. – Jeshurun

0

의 인덱스를 얻기 위해 그 방법을 사용해보십시오. 목록의 각 요소를 키로 매핑하기 만하면 나중에 키를 사용하여 요소를 검색 할 수 있으므로 HashMap을 사용하는 것이 좋습니다. 주문에 더 관심이 있다면 목록을 사용할 수 있습니다. 누군가 이미 응답 했으므로 목록에 요소를 추가 할 때 색인이 증가합니다. 손에 들고있을 총 프레임 수를 알고있는 경우, 생성자에 대한 인수로 크기를 전달하여 ArrayList를 초기화 한 다음 list.add (0 ... size를 사용하여 수동으로 인덱스를 지정하여 각 프레임을 추가하십시오 -1, 요소).한마디로

,

  1. 단순히 저장하고 자신의 키/ 증가 키를 검색 할 경우 ->는 HashMap을 사용합니다.
  2. 주문이 중요한 경우 목록을 사용하십시오.
+0

특정 설정이나 개체를 사용하여 ArrayList에서 복제하려면 사용하고 싶습니다. 아이디어는 목록에 리소스 집합을로드하고 비트 맵/모든 것에 배치 할 위치에 대한 목록을 직접 참조하는 것입니다. –

+0

당신이 말한 것에서는, 예전의 2 (또는 아마 3) 차원의 객체 형 배열을 사용하는 것이 나을 것 같습니다. 그런 다음 다른 속성을 저장하기위한 다른 유사한 배열을 만들 수 있습니다. 예를 들어, 어떤 객체의 4x4 배열을 상상해보십시오. (2,3)과 (0,2)의 인스턴스는 무적과 같은 특별한 속성을 갖습니다. 다른 4x4 부울 배열을 만들고 나머지는 false 일 수 있지만이 요소를 true로 표시 할 수 있습니다. 이 배열을 탐색하여 다른 배열에이 속성이있는 객체 (동일한 점 집합에 있음)를 파악할 수 있습니다. – Jeshurun

0

이렇게하면 ArrayList을 사용하는 대신 Map<Integer,FrameData>을 사용할 수 있습니다. Integer을 프로젝트에 더 잘 맞는 것으로 바꿀 수 있습니다.

관련 문제