2012-04-23 3 views
1

다음과 같은 문제가 있습니다.자바에서 arraylist의 섹션 manupulating

큰 행과 열 크기의 W의 행렬을 가지고 있습니다. 로우들 각각은 (두 값 가득) 특징 값을 나타내는 .And 매트릭스 같이 consturcted된다

Hashmap<Integer,Arraylist<Double>> W = new Hashmap<Integer,Arraylist<Double>>(); 

계산을 실시 할 때, 난 행들 각각의 일정 부분을 가지고 매트릭스을 업데이트 할 필요가있다. 나는 Arraylist에서 subList 메서드를 찾았습니다. 그러나 문제는 입니다. 목록 만 반환하지만 arraylist가 필요합니다. 이미 구현 한 많은 메서드가 인수로 사용하기 때문입니다. 그렇다면이 사건의 해결책은 무엇일까요?

w1 = [1,3 ,4,6,9,1,34,5,21,5,2,5,1] 
w11 = [1,3,4] 
w11 = w11 +1 = [2,4,5] 
This changes w1 to = [2,4 ,5,6,9,1,34,5,21,5,2,5,1] 

답변

5

나는 전혀 문제가되지 않습니다 그 문제는 반환 단지 목록입니다하지만 난 ArrayList를

필요 해요 Arraylist.But에서 하위 목록 방법을 찾았다 . 실제로 가능한 경우 List을 사용하도록 코드를 변경해야합니다.

ListArrayList과 같은 구체적인 유형의 인터페이스입니다. 아래는 완벽하게 유효합니다

List<String> list = new ArrayList<String>(); 
list.add("hello"); 
list.add("world"); 

내가 변경하는 것이 좋습니다 당신의 W이에 : 다른 ArrayList의 슬라이스의 뷰를 제공하기 위해 ArrayList를 서브 클래 싱 할 수

Hashmap<Integer, List<Double>> W = new Hashmap<Integer, List<Double>>(); 
+0

+1. 실제로,'ArrayList'의 일부 기능이 명시 적으로 요구되지 않는 한, generic 클래스를 매개 변수로 사용하는 것이 좋습니다. – Tudor

+0

사실 나는 대부분의 장소에서 ** Arraylist **를 사용합니다. : – thetna

+2

언제나 new ArrayList (list)를 사용하거나 캐스트 할 수 있지만 그와 같은 방법은 권장하지 않습니다. – adarshr

1

. 좋아요 :

class ArrayListSlice<E> extends ArrayList<E> { 
    private ArrayList<E> backing_list; 
    private int start_idx; 
    private int len; 
    ArrayListSlice(ArrayList<E> backing_list, int start_idx, int len) { 
    this.backing_list = backing_list; 
    this.start_idx = start_idx; 
    this.len = len; 
    } 
    public E get(int index) { 
    if (index < 0 || idx >= len) throw new IndexOutOfBoundsException(); 
    return backing_list.get(start_idx + index); 
    } 
    ... set, others? ... 
} 

그런 다음 w11 = new ArrayListSlice<Double>(w1, 0, 3)을 할 수 있습니다. w11에 대한 작업은 set을 올바르게 구현한다고 가정하고 w1에 표시됩니다.

이 작업을 수행하려면 대부분의 ArrayList 메소드를 구현해야 할 것입니다. 다른 사람들에게만 의지하면 효과가있을 수도 있지만 사양에서 알기가 어렵습니다.