2012-04-23 9 views
1

私は次の問題があります。Javaでarraylistのmanupulatingセクション

私はWの大きな行と列の次元の行列を持っています。行のそれぞれは、(二重値で満たされた)特徴値を表す.AND行列は次のようにconsturctedされる:計算しながら

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

、私は、行のそれぞれの特定の部分を取り、マトリックス中にそれらを更新する必要があります。私はメソッドをArraylistで探しました。しかし、問題 はリストだけを返しますが、私は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を使用するようにコードを変更する必要があります。

Listは、ArrayListなどの具体的な種類が実装されているインターフェイスです。以下完全に有効です:

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'のいくつかの機能が明示的に必要とされない限り、汎用クラスをパラメータとして使うことが常に推奨されます。 – 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のメソッドを実装する必要があります。彼らが他の人に頼っているだけでも働く人もいるかもしれませんが、それは仕様からは分かりません。