我有以下问题。
我有一个大行和列维度的 W 矩阵。每行代表特征值(用双值填充)。矩阵构造为:
Hashmap<Integer,Arraylist<Double>> W = new Hashmap<Integer,Arraylist<Double>>();
在进行计算时,我需要获取每行的某些部分并以矩阵形式更新它们。我在subList
中查找了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]
答案 0 :(得分:5)
我在Arraylist中查找了subList方法。但问题是它只返回列表但我需要arraylist
这根本不是问题。实际上,您应该将代码更改为尽可能使用List
。
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>>();
答案 1 :(得分: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
,w1
上的所有操作都会显示在set
中。
您可能需要实现ArrayList的大多数方法才能使其工作。如果他们只依赖别人,有些人可能会工作,但这很难从规范中得知。