如何在Java中创建向量数组?

9

我希望你能帮我翻译一下Java中与整数向量数组有关的内容。如果我输入:

Vector<Integer>[] matrix;
matrix = new Vector<Integer>[100];

我得到了编译错误

无法创建 Vector 的通用数组

我应该使用什么?

    matrix = new Vector[100];

应该使用什么代替?(这会导致一个警告)

或者我应该不适用向量数组,改用向量嵌套向量呢?

注意:我不想要 Vector< Integer >,我想要 Vector< Integer >[] 来创建一个整数矩阵而不使用 Integer[][].


1
我是唯一一个跟不上这个思路的人吗? - mre
你应该使用List而不是Vector。你不用数组的数组或者列表的列表,有什么特殊的原因吗? - Matt Ball
列表是一个接口,你可能指的是ArrayList。 - michelemarcon
可能是Java泛型数组语法的重复问题。 - McDowell
5个回答

6

Java没有任何方法可以创建一个泛型类型的数组而不会产生警告或者需要抑制警告。因此,你能得到的最好结果就是:

@SuppressWarnings("unchecked")
Vector<Integer>[] anArray = (Vector<Integer>[]) new Vector<Integer>[100];

您可以完全避免使用数组来解决这个问题。例如:
Vector<Vector<Integer>> list = new Vector<Vector<Integer>>(100);

或者使用集合类型:

List<List<Integer>> list = new ArrayList<List<Integer>>(100);

是的,我认为抑制警告或者简单地使用向量的向量是唯一的方法。 - Mauricio
我知道这个答案已经有10年了,但是第一个解决方案现在无法编译。 - Alex Mandelias

3
Vector<Integer> vector = new Vector<Integer>();

如果您尝试执行以下操作:
Vector<Integer> vector = new Vector<Integer>();
Vector<Integer>[] vectors = {vector};

你将会得到一个编译错误:
``` 无法创建Vector的通用数组 ```
但是,如果你不指定泛型类型,Java将允许它,但会有一个警告:
Vector<Integer> vector = new Vector<Integer>();
Vector[] vectors = {vector};

这只创建了一个向量,而不是向量数组。 - Matt Ball
这似乎是他想要的。我仍然困惑于他所说的“向量数组”真正意味着什么。 - mre
我需要一个向量数组,而不仅仅是一个向量。它类似于Integer [] [],但内部数组是一个向量而不是一个数组,因为它需要增加。我可以使用Vector of Vector,但外部的那个不会增加,所以它只能是一个数组。 - Mauricio
是的,最后一个可以工作,但我认为 Vector< Vector< Integer > > 更好。 - Mauricio
“Java中不允许使用通用数组”是错误的。参数化类型的数组是允许的,也是Java语言必不可少的一部分。毕竟,基于数组的集合类在内部使用它们(大多数是隐式的,但有时是显式的)。 - x4u

1

向量由数组支持,将增长或缩小到足够容纳您插入其中的元素的大小。 因此,您可以预分配向量,但实际上不必在创建时指定大小。

// preallocated vector, which can hold 100 elements
Vector<Integer> integers = new Vector(100);

.

// default vector, which will probably grow a couple of times when adding 100 element
Vector<Integer> integers = new Vector();

一个真正的Java数组无法增长或缩小,也不支持从中间删除元素。要分配一个数组,您可以使用
// allocate an array
Integer[] integers = new Integer[100];

现在如果你想要一个“向量数组”,那么你可以这样做

// array of vectors
Vector[] vectors = new Vector[100];

0
为避免类型转换,请考虑以下实现方式:
    Vector<Integer>[] intVectorArray;
    Vector[] temp = new Vector[desiredSize];
    intVectorArray = temp;
    for(int i = 0;i<intVectorArray.length;i++){
        hashArray[i] = new Vector<Integer>();
    }

新创建的intVectorArray将继承temp的通用向量数组类型,以给您所需的维度,而for循环将实例化您所需的数据类型。
当您准备在intVectorArray元素上调用Integer函数时,您就可以开始了!

0
要创建一个泛型数组,你需要先创建一个非泛型的数组并强制转换成泛型。你还必须初始化数组中的所有元素,否则它们将为 null。:(
Vector<Integer>[] anArray = (Vector<Integer>[]) new Vector[100];
for(int i = 0; i < anArray.length; i++)
   anArray[i] = new Vector<Integer>();

然而,由于Vector是一个已经在Java 1.2(1998年)被ArrayList替代的遗留类,因此我会使用List作为接口,ArrayList作为实现。

List<Integer>[] anArray = (List<Integer>[]) new List[100];
for(int i = 0; i < anArray.length; i++)
   anArray[i] = new ArrayList<Integer>();

另一个选择是使用一个包含原始int而不是Integer对象的集合。如果需要,这可以提高性能。

TIntArrayList[] anArray = new TIntArrayList[100];
for(int i = 0; i < anArray.length; i++)
   anArray[i] = new TIntArrayList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接