2011-03-10 4 views
5

가 나는 ArrayList<ArrayList<E>>와 2D의 ArrayList를 만들 수 있다고 알고 있지만, 추가 및 객체를 검색에 올 때 그 성가신 진짜 캐스팅 악몽이다. Java 용 효율적인 2D ArrayList 클래스가 있습니까?

보다 효율적으로 이런 종류의 작업을 수행 어떤 차원의 ArrayList 클래스가 있습니까? 나는 진정한 2D ArrayList 클래스를 기초부터 작성하고 있는데, 효율적인 방식으로 이런 일을 한 다른 사람이 있는지 궁금합니다.

+0

효율성을 더 높이려면 무엇이 필요합니까? – jjnguy

+0

일반적으로 효율성. LinkedLists, 중첩 ArrayList 또는 단순한 다차원 배열을 사용하는 의사 2D ArrayList 클래스가 있습니다.이 클래스는 엄청나게 비효율적 인 속도 및 메모리가 될 수 있습니다. –

답변

4

아니, 불행하게도 2D ArrayList 클래스 없다. 당신의 다른 옵션 (경우에 Diamension의 0/1/2이 일정)입니다

MyType[][] myList = new MyType[n][m]; 

또는

ArrayList<MyType>[] myList = new ArrayList<MyType>[n]; 

또는

ArrayList<ArrayList<MyType>> myList = new ArrayList<ArrayList<MyType>>(); 

또 다른 옵션은 모든 데이터를 저장하는 것입니다 1d ArrayList에 저장하고 (x, y)를 받아 ArrayList에 x를 반환하는 함수를 만듭니다. 이 방법은 2 차원 배열 밖에 보여하지만, 사용 1D ArrayList를

+0

+1 "다른 옵션" –

1

쉽게 요소를 저장 "의 ArrayList를>"형 접근 방식은 미세 내가 본 것을에서 이런 일이 꽤 표준입니다. 아이템 추가/제거 등의 편리한 메소드를 제공하는 2D 배열리스트 클래스를 쉽게 작성할 수 있습니다.이 클래스를 사용하려면 "성가신"또는 "캐스트 악몽"과는 거리가 멀습니다. 예를 들어 this 구현을 살펴보십시오. 그것은 완벽하지는 않지만 이런 종류의 접근법을 사용하는 것이 얼마나 쉬운지를 보여줍니다.

0

구글 컬렉션은 테이블 컬렉션이 있습니다. 행/열로 배치되며 직접, bycol 및 행별로 액세스 할 수 있습니다. 그것은 어떤 도움 경우 테이블의 다른 구현 액세스 유형

1

에 따라 다른 효율성을하는 것은하는 javolution에서 FastTable보고 구아바

0

나는 3D "그리드"데이터 구조를 구축에 Table 구현 되세요.

키 트릭

서브 분할이다 희소 데이터를 효율적으로 저장 될 수 있도록 "블록"에 공간. 그 아마 과잉의 비트 비록 당신이,는 z 치수 (0 그것을 유지)를 무시함으로써 좋아하는 경우에

당신은 2D 수집로 사용할 수 있습니다. 아직도 이런 종류의 구조를 원하면 옵션. 또는 2D로 단순화 할 수 있습니다.