2011-10-29 3 views
1

2dArray가 주어지면 X, Y 인덱스를 다음과 같이 지정하여 요소를 직접 설정할 수 있습니다.2D 배열을 X, Y ids로 배열하는 방법?

2dArray[row][col] = "hello"; 

2D Vector 또는 2D ArrayList를 사용하여 동일한 작업을 수행하려면 어떻게해야합니까? 그 안에있는 요소를 변경하고 그 열 벡터를 행에 다시 설정하려면 전체 열 벡터를 다시 작성해야하는 것처럼 보입니다.

저는 단순한 타일 기반 게임을하고 있습니다. 따라서 X, Y 인덱스로 직접 설정/설정하는 기능은 매우 편리합니다.

생각들? 어떤 아이디어 주셔서 감사합니다

+0

왜 ArrayList를 또는 벡터? 타일 ​​기반 게임의 경우 2D 배열을 사용한 접근 방식이 나에게 맞는 것처럼 보입니다. ArrayList의 중간에 삭제 및 삽입하는 것은 꽤 비쌉니다 (올바르게 기억한다면'O (n)'). 배열에서 그것은'O (1)'이다. – Atmocreations

+1

@Atmocreations 배열리스트는 배열에 의해 뒷받침된다. –

+0

@Atmocreations ArrayList와 Array 모두에 대해 'O (n)'입니다. LinkedList는'O (1)'(모든 삭제/추가에는 일정한 링크 변경이 필요하기 때문에)라고 생각할 것입니다. – user991710

답변

3

목록이 List<List<T>>이면 get (x)는 행을 식별 한 다음 (y, elem)은 행의 y 번째 요소 (y 번째 열에 있음)를 설정합니다. ~ elem

1

당신은 그것을위한 수업을 만들 수 있습니다.

import java.util.LinkedList; 
import java.util.List; 

public class AClass<T> 
{ 
    public Store2D() 
    { 
     coords = new LinkedList<List<T>>(); 
    } 
    public void set(int x, int y, T value) 
    { 
     coords.get(x).set(y, value); 
    } 
    public T get(int x, int y) 
    { 
     return coords.get(x).get(y); 
    } 
    List<List<T>> coords; 
} 

그 다음을 사용 :

AClass<String> vector = new AClass<String>(); 

AClass.set(13, 17, "Hello"); 
AClass.set(17, 13, "World"); 
System.out.println(AClass.get(13, 17)+" "+AClass.get(17, 13)); 

출력 = "안녕하세요"

관련 문제