2011-01-11 4 views
1

IndexOutOfBoundsException을받지 않고 표에 추가해야하는 개체 목록이 있습니다. 각 개체에는 연결된 두 개의 숫자가 있습니다. 해당 숫자는 indexcolumn에 해당합니다. 3 개의 열과 무제한 행이있을 수 있습니다. 그래서,이 그리드 만 올바른 순서로 add() 메소드를 호출해야합니다Java에서 루프 정렬

(0,0), (0,1), (0,2), (1,0) ...

그리드 그러므로 다음과 같을 것이다 : 나는 또한 계정에 어떤 객체를 특정 위치에 존재하지 않을 수있는 가능성을 취해야합니다

0 1 2 
0 x x x 
1 x x x 
2 x x x 
3 x x x 

. 예 :

A) x x x B) x x C) x x x 
    x x x  x x  x x 
    x x   x  x 
    x x   x  x 
    x x 

이 작업을 수행 할 수 있습니까? 어디서부터 시작해야할지 모르겠습니다.

+0

당 [이 질문은] (http://stackoverflow.com/questions/416266/sorted-collection-in-java), 당신이 고려할 수있는 [PriorityQueue 인 (http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html). OTOH, 목록에있는 항목 수가 너무 많지 않은 경우 [삽입 유형] (http://en.wikipedia.org/wiki/Insertion_sort)을 고려할 수 있습니다. – GreenMatt

+0

전체 "정렬"주제가 어디서 나오는 지 이해할 수 없습니다. 질문 제목과 태그에 있지만 질문 자체에는 없습니다. –

답변

3

아마도 (행, 열)로 객체를 저장하는 또 다른 데이터 구조에 대해 생각해야합니다. 인터페이스는 다음과 같습니다.

public interface GridModel { 
    void set(int row, int column, Object o); 
    Object get(int row, int column) 
} 

그리고 목록을 사용하여 데이터를 저장할 수 있습니다. List<List<Object>> 또는 Mark Peters은 희소 행렬

셀 값으로 작업하는 것이 중요하면 셀 반복기 메서드를 추가하십시오. 간단한 구현 보일 것 같은 :

public Iterable<Object> cellIterator() { 
    final List<Object> items = new java.util.ArrayList<Object>(); 
    for(final List<Object> row : cells) { 
     for(final Object cell: row) { 
      items.add(cell); 
     } 
    } 
    return items; 
} 
+0

모든 데이터가 OP의 예 (A, B 및 C)의 패턴을 따르는 경우 주어진 열에서 채워진 인덱스에 간격이없는 경우 목록의 목록이 더 나은 데이터 구조입니다. –

3

찾고있는 것은 아마도 sparse matrix입니다.

가장 간단한 구현 방식 중 하나는 기본적으로 좌표를 객체에 연결하는 테이블 인 키 사전 접근 방식입니다. 이런 식으로 뭔가 :

Map<Point, T> grid = new HashMap<Point, T>(); 
grid.put(new Point(5, 2), myObj); 

PointhashCode() 제대로 구현 equals()columnindex 필드를 포함하는 구현 클래스 될 것입니다. 또는 실제로 게으른 경우 java.awt.Point을 사용하여 해킹 할 수 있습니다.

@sblundy에서 제안한 것과 비슷한 인터페이스 내에 캡슐화 할 수 있습니다. 나는 다음과 같이 제안 할 것입니다 :

public interface Grid<T> { 
    public T set(int column, int index, T val); 
    public T get(int column, int index); 
    //other optional methods 
} 
+0

'Point' 클래스는 어디에서 작동합니까? 나는'HashMap.entryset()'을 반복 할 것이고 그것은 순서대로 될 것인가? – Federer

+0

@BlueMalc : 개체를 저장하고 검색하기 위해 사용됩니다. 열쇠의 반복 처리에 대해서는 어떠한 보증도하지 않습니다. 너는 너의 포스트 안에 그런 것을 언급하지 않았다. –