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

我使用下面的代码尝试创建一个字符串向量数组,我希望有一个包含3个项目的数组,每个项目都是一个字符串向量:

Vector Result_Vector_Array[]=new Vector[3]; 

但NB强调该行为错误(通用数组创建),有什么问题? 这样做的正确方法是什么? 我知道还有Arraylist,但它没有同步,所以我想使用矢量。

由于类型擦除 ,JVM在运行时不知道您有一个Vector of String 。 它能做的最好的事情是创建一个’原始’矢量。 它不能保证所有Vector实际上都包含String 。 这就是您从IDE收到警告的原因。

正如jgubby建议的那样,解决这个问题的一种方法是投下它。 另一种方法是将List放入Vector ,而不是数组。

但是,更重要的是,为什么arrays只有3个项目? 创建一个有三个字段放入Vector的类不是更好吗? 有三个项目,这不是太多的工作,你得到额外的奖励,你可以给三个元素中的每一个一个有用的名称,这将使你的代码更清晰。

此外,从Java 6开始,存在许多有用的新同步List实现,它们可能比Vector更好地执行,例如CopyOnWriteArrayList ,或者在Collections.synchronizedList包装常规List

您无法创建这样的数组,请执行以下操作:

 Vector Result_Vector_Array[] = (Vector[]) new Vector[3]; 

我建议采用不同的方法 – 像这样的容器数组通常很难使用,并且无助于理解代码。

PS还值得注意的是java命名约定

  Vector resultVectorArray[] = (Vector[]) new Vector[3]; 

并且通常不会在名称中包含类型(我怀疑这将是有争议的!),为什么不把它称为’结果’并让类型系统担心类型?

我建议继续collections,做类似的事情

 Collection> resultVectorArray = new ArrayList>(3); 

然后你可以在构造函数中使用generics,并且几乎可以说出相同的效果

您还可以创建:

 Vector> Result_Vector_Array=new Vector>( ); 

或者您可以将Vector替换为其他一些集合。

使用reflection它将是:

  Vector[] arrayOfVectors = (Vector[]) java.lang.reflect.Array.newInstance(Vector.class, size); java.util.Arrays.fill(arrayOfVectors, new Vector()); for (Vector v : arrayOfVectors) { System.out.println(v); } 

或者您可以使用ArrayList,然后使用Collections#synchronizedList(java.util.List)将其包装起来

如果要使用同步的ArrayList,可以在java.util.Collections中使用synchronizedList方法。

 ArrayList a1 = new ArrayList(); ArrayList a2= new ArrayList(); ArrayList a3 = new ArrayList(); ArrayList array[] = (ArrayList[]) new ArrayList[3]; array[0]= Collections.synchronizedList(a1); array[1]= Collections.synchronizedList(a2); array[2]= Collections.synchronizedList(a3); 

我应该理解你将在该arrays上使用multithreading吗?…

如果不是,那么您不必担心同步。

我会:

  List> listOfLists = new ArrayList>(); List firstVector = new ArrayList(); firstVector.add( "one" ); firstVector.add( "two" ); listOfLists.add( firstVector ); System.out.println( listOfLists.get(0).get(0) == "one" ); System.out.println( listOfLists.get(0).get(1) == "two" ); 

打印真实,真实