1

行と列の次元が大きいWの行列があります。各行は特徴値(double値で埋められます)を表し、マトリックスは次のように構成されます。

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

計算を行う際に、各行の特定の部分を取得して、マトリックスで更新する必要があります。subListでメソッドを探しましたArraylist。しかし、問題はそれがリストだけを返すことですが、私は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]
4

2 に答える 2

5

ArraylistでsubListメソッドを探しましたが、問題はリストのみを返すことですが、arraylistが必要です

それはまったく問題ではありません。List実際、可能な限り使用するようにコードを変更する必要があります。

Aは、実装Listなどの具体的なタイプのインターフェイスです。ArrayList以下は完全に有効です:

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

これに変更することをお勧めしますW

Hashmap<Integer, List<Double>> W = new Hashmap<Integer, List<Double>>();
于 2012-04-23T15:45:41.937 に答える
1

サブクラス化ArrayListして、別のスライスのビューを提供できますArrayList。このような:

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に表示されます。w1set

これを機能させるには、おそらくArrayListのほとんどのメソッドを実装する必要があります。他のものに依存しているだけで動作するものもありますが、それを仕様から判断するのは困難です。

于 2012-04-23T16:28:05.127 に答える