在Java中是否可以参数化数据结构,以便它只能保存一定长度的数组。我正在编写一个处理3d对象的程序,我想要一个列表,它只保存在数组中存储为3个双精度或双精度的向量[3]。下面的代码不会编译。
Vector<double[3]> myList = new Vector<double[3]>();
有没有办法限制存储在数据结构中的数组的大小?
答案 0 :(得分:0)
是的,创建该数据结构的子类并覆盖该数据结构的add
/ put
方法,在添加数组长度是否为3之前进行检查。
以下是示例:
import java.util.Vector;
public class SubClassArrayList<E> extends Vector<E> {
public boolean add(E e , int length) {
if (e instanceof Object[] && ((Object[]) e).length == length) {
return super.add(e);
}
else return false;
}
}
以上内容也适用于ArrayList
答案 1 :(得分:0)
除了Vishrant的答案,你可以编写一个自定义类,比如说Coord,它有一个包含双精度数组成员并使用它。
public class Coord {
private double[] values;
public Coord(double[] values) {
//check whether values array has a length of 3
this.values = values;
}
//add getter and setter, check the size of the input array in the setter method
}
然后,您可以在java.util。*数据结构中使用上面的类。如果要使用HashMap或HashSet,则应该实现hashCode()和equals()方法。
与问题没有直接关系,但我想说除非你想要线程安全,否则你不应该使用Vector。喜欢实现List的类。