1

我有一个大行和列维度的W矩阵。每一行代表特征值(填充双值)。矩阵构造为:

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

在进行计算时,我需要获取每一行的某些部分并在矩阵中更新它们。我subListArraylist. 但问题是它只返回列表,但我需要 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

AList是一个具体类型的接口,例如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 回答