정수 배열 (또는 형식이 무엇이든)을 만들고 싶지만 "add", "remove", "contains", "indexOf "ArrayList 클래스와 유사합니다.Java : ArrayList와 비슷한 메소드/기능을 가진 2 차원 배열
이러한 기능이있는 기존 클래스가 있습니까?
PS : 나는
정수 배열 (또는 형식이 무엇이든)을 만들고 싶지만 "add", "remove", "contains", "indexOf "ArrayList 클래스와 유사합니다.Java : ArrayList와 비슷한 메소드/기능을 가진 2 차원 배열
이러한 기능이있는 기존 클래스가 있습니까?
PS : 나는
아니요, 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가 내부적으로 사용되지 않습니다 고정 컴파일 오류
은 표준 자바 라이브러리의 네이티브 매트릭스 유형이 없습니다 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
}
실제로'remove'가 무엇을 기대합니까? (그리고 인수를 확인하고 싶습니까?) –
@Tom http://java.sun.com/javase/6/docs/api/java/util/List.html#remove(java.lang.Object) – cletus
I 'Matrix.remove'를 의미합니다. 첫 번째로는 첫 번째 동의 만 제거하므로 구현 레이아웃에 따라 달라집니다. 둘째, 나머지 항목을 대부분의 unMatrix와 같은 방식으로 이동시켜 'get'을 이상하게 던지게합니다. –
체크 아웃 JAMA, 그것은 Mathworks 및 NIST 출신입니다.
귀하의 설명에서 JAMA를 사용해 보시기 바랍니다.
XY 매트릭스에 대한 고유 한 구현을 만들 수도 있습니다. 그러나이를 수행하기 위해 구현에서 정확히 원하는 것을 결정해야합니다.
매트릭스가 고정 된 크기가 아닌 경우 매트릭스를 저장하기 위해 3 튜플 형식과 같은 것을 사용할 수 있습니다. (이 표현은 매트릭스가 희소 한 경우에만 효율적입니다.) 내부적으로는 3 개의 ArrayList를 사용합니다. 하나는 행 번호를 저장하고 다른 하나는 열 번호를 저장하고 세 번째는 실제 값을 저장합니다.
따라서메서드를 작성합니다.이 메서드는 행 번호, 열 번호 등으로 정렬 된 ArrayLists 유지와 같은 작업을 처리하여 임의 액세스의 효율성을 높입니다.
이 표현을 사용하면 ArrayList에 사용할 수있는 remove()
, 과 같은 모든 메서드를 구현할 수 있습니다.
"ArrayList의 ArrayList를 만들고 싶지 않습니다"이유는 무엇입니까? 실제로 귀하의 설명에 완벽하게 맞을 것입니다. 원시 타입을 사용하기를 원하는가? – Searles
아니요. 둘 이상의 셀을 차지할 객체를 만들고 싶기 때문에 각각 세로 또는 가로로 배치 할 수 있습니다. ArrayList가 수직이라고 생각하면 varios ArrayLists의 다양한 위치를 한 번에 사용하므로 객체에 가로로 문제가 발생합니다. –