如何在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" );
打印真实,真实