2010-03-30 2 views
5

정수 배열 (또는 형식이 무엇이든)을 만들고 싶지만 "add", "remove", "contains", "indexOf "ArrayList 클래스와 유사합니다.Java : ArrayList와 비슷한 메소드/기능을 가진 2 차원 배열

이러한 기능이있는 기존 클래스가 있습니까?

PS : 나는

+1

"ArrayList의 ArrayList를 만들고 싶지 않습니다"이유는 무엇입니까? 실제로 귀하의 설명에 완벽하게 맞을 것입니다. 원시 타입을 사용하기를 원하는가? – Searles

+0

아니요. 둘 이상의 셀을 차지할 객체를 만들고 싶기 때문에 각각 세로 또는 가로로 배치 할 수 있습니다. ArrayList가 수직이라고 생각하면 varios ArrayLists의 다양한 위치를 한 번에 사용하므로 객체에 가로로 문제가 발생합니다. –

답변

3

아니요, AFAIK에는 이와 같은 클래스가 없습니다. 그러나 구현 한 매우 용이해야한다 :

class BiDimensionalArray<T>{ 
    Object[][] backupArray; 
    int lengthX; 
    int lengthY; 

    public BiDimensionalArray(int lengthX, int lengthY) { 
    backupArray = new Object[lengthX][lengthY]; 
    this.lengthX = lengthX; 
    this.lengthY = lengthY; 
    } 

    public void set(int x, int y, T value){ 
    backupArray[x][y] = value; 
    } 

    public T get(int x, int y){ 
    return (T) backupArray[x][y]; 
    } 

    public void addX(T[] valuesY) { 
    Object[][] newArray = new Object[lengthX+1][lengthY]; 
    System.arraycopy(backupArray, 0, newArray, 0, lengthX); 
    newArray[lengthX]=valuesY; 
    backupArray = newArray; 
    lengthX = lengthX+1; 
    } 
} 

참고 :이 new T[][]

같은 것은 없다 데모
에 대한

추가 addX 방법을 편집하기 때문에 Typeparameter가 내부적으로 사용되지 않습니다 고정 컴파일 오류

1

은 표준 자바 라이브러리의 네이티브 매트릭스 유형이 없습니다 ArrayList에의 ArrayList를을 만들려하지 않습니다. 즉, 하나를 만드는 것이 매우 쉽습니다. 메소드는 구현하기가 쉽지 않으므로 어레이또는 기타로 백 슬래이션을 수행 할 수 있습니다.

public class Matrix<T> { 
    private final List<T> values; 
    private final int rows; 

    public Matrix(int x, int y) { 
    this.rows = x; 
    values = new ArrayList<T>(x * y); 
    ] 

    public int get(int x, int y) { 
    return values.get(x * rows + y); 
    } 

    public boolean contains(T t) { 
    return values.contains(t); 
    } 

    // etc 
} 
+0

실제로'remove'가 무엇을 기대합니까? (그리고 인수를 확인하고 싶습니까?) –

+0

@Tom http://java.sun.com/javase/6/docs/api/java/util/List.html#remove(java.lang.Object) – cletus

+1

I 'Matrix.remove'를 의미합니다. 첫 번째로는 첫 번째 동의 만 제거하므로 구현 레이아웃에 따라 달라집니다. 둘째, 나머지 항목을 대부분의 unMatrix와 같은 방식으로 이동시켜 'get'을 이상하게 던지게합니다. –

1

체크 아웃 JAMA, 그것은 Mathworks 및 NIST 출신입니다.

2

귀하의 설명에서 JAMA를 사용해 보시기 바랍니다.
XY 매트릭스에 대한 고유 한 구현을 만들 수도 있습니다. 그러나이를 수행하기 위해 구현에서 정확히 원하는 것을 결정해야합니다.
매트릭스가 고정 된 크기가 아닌 경우 매트릭스를 저장하기 위해 3 튜플 형식과 같은 것을 사용할 수 있습니다. (이 표현은 매트릭스가 희소 한 경우에만 효율적입니다.) 내부적으로는 3 개의 ArrayList를 사용합니다. 하나는 행 번호를 저장하고 다른 하나는 열 번호를 저장하고 세 번째는 실제 값을 저장합니다.
따라서메서드를 작성합니다.이 메서드는 행 번호, 열 번호 등으로 정렬 된 ArrayLists 유지와 같은 작업을 처리하여 임의 액세스의 효율성을 높입니다.
이 표현을 사용하면 ArrayList에 사용할 수있는 remove(), 과 같은 모든 메서드를 구현할 수 있습니다.