【问题标题】:How to create an array of vector in Java?如何在 Java 中创建向量数组?
【发布时间】:2011-06-01 14:56:47
【问题描述】:

所以,我想要一个 Java 中的整数向量数组。

如果我放

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

我得到不能编译错误

无法创建 Vector 的通用数组

我应该使用

    matrix = new Vector[100];

相反? (发出警告)

或者我应该干脆不使用向量数组,而是使用向量的向量吗?

注意:我不想要 Vector,我想要 Vector[] 在不使用 Integer[][] 的情况下创建整数矩阵。

【问题讨论】:

  • 只有我一个人努力追随这种思路吗?
  • 你真的应该使用List 而不是Vector。您不使用数组数组或 v̶e̶c̶t̶o̶r̶̶o̶f̶̶v̶e̶c̶t̶o̶r̶s̶ 列表列表是否有特殊原因?
  • List是一个接口,你可能是指ArrayList。

标签: java arrays vector


【解决方案1】:

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);

【讨论】:

  • 是的,我认为抑制警告或简单地使用向量的向量是唯一的方法。
  • 我知道答案是 10 年,但第一个解决方案不再编译。
【解决方案2】:
Vector<Integer> vector = new Vector<Integer>();

如果你尝试做这样的事情:

Vector<Integer> vector = new Vector<Integer>();
Vector<Integer>[] vectors = {vector};

你会得到一个编译错误:

无法创建通用数组 向量

但是,如果您不指定泛型类型,java 将允许它但带有警告:

Vector<Integer> vector = new Vector<Integer>();
Vector[] vectors = {vector};

【讨论】:

  • 这只会创建一个向量,而不是向量数组。
  • 这似乎是他想要的。我仍然对他所说的“向量数组”的真正含义感到困惑。
  • 我需要一个向量数组,而不仅仅是一个向量。它类似于 Integer[][],但内部数组是向量而不是数组,因为它需要增加。我可以只使用 Vector of Vector,但外部的不会增加,所以它可能只是一个数组。
  • 是的,最后一个可行,但我相信 Vector> 更好。
  • Java 中不允许使用泛型数组 是错误的。参数化类型的数组是允许的,并且对于 Java 语言是必不可少的。毕竟基于数组的集合类在内部使用它们(大部分是隐式的,但有时是显式的)。
【解决方案3】:

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

// 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];

【讨论】:

    【解决方案4】:

    要创建泛型数组,您必须创建非泛型并对其进行转换。您还必须初始化数组中的所有元素,否则它们将为空。 :(

    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();
    

    【讨论】:

      【解决方案5】:

      为避免类型转换,请考虑以下实现:

          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 函数时,您将一切就绪!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-22
        • 1970-01-01
        相关资源
        最近更新 更多