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

时间:2009-07-10 20:17:46

标签: java arrays vector

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

Vector<String> Result_Vector_Array[]=new Vector<String>[3];

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

7 个答案:

答案 0 :(得分:6)

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

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

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

此外,自Java 6以来,存在许多有用的新同步List实现,这些实现可能比Vector执行得更好,例如CopyOnWriteArrayList,或者包装常规{{1}在Collections.synchronizedList

答案 1 :(得分:5)

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

Vector<String> Result_Vector_Array[] = (Vector<String>[]) new Vector[3];

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

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

 Vector<String> resultVectorArray[] = (Vector<String>[]) new Vector[3];

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

答案 2 :(得分:1)

您还可以创建:

Vector<Vector<String>> Result_Vector_Array=new Vector<Vector<String>>( );

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

答案 3 :(得分:1)

我建议保留收藏品,做点什么

Collection<Vector<String>> resultVectorArray = new ArrayList<Vector<String>>(3);

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

答案 4 :(得分:0)

使用反射将是:

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

或者您可以使用ArrayList,然后使用Collections#synchronizedList(java.util.List)

将其包装

答案 5 :(得分:0)

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

ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2= new ArrayList<String>();
ArrayList<String> a3 = new ArrayList<String>();

ArrayList<String> array[] = (ArrayList<String>[]) new ArrayList[3];

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

答案 6 :(得分:-1)

我是否应该了解您将在该阵列上使用多线程?...

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

我会:

    List<List<String>> listOfLists = new ArrayList<List<String>>();

    List<String> firstVector = new ArrayList<String>();

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

打印真实,真实