Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中创建字符串向量数组?_Java_Arrays_Vector - Fatal编程技术网

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

如何在Java中创建字符串向量数组?,java,arrays,vector,Java,Arrays,Vector,我使用以下代码尝试创建一个字符串向量数组,我希望有一个3项数组,每个项都是字符串向量: Vector<String> Result_Vector_Array[]=new Vector<String>[3]; Vector Result_Vector_Array[]=新向量[3]; 但是NB将该行突出显示为错误(通用数组创建),这有什么不对?正确的方法是什么?我知道还有Arraylist,但它不是同步的,所以我想使用vector。您不能创建这样的数组,请执行以下操作:

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

Vector<String> Result_Vector_Array[]=new Vector<String>[3];
Vector Result_Vector_Array[]=新向量[3];

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

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

Vector<String> Result_Vector_Array[] = (Vector<String>[]) new Vector[3];
向量结果_向量_数组[]=(向量[])新向量[3];
我建议使用一种不同的方法——像这样的容器数组通常很难使用,并且无助于理解代码

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

 Vector<String> resultVectorArray[] = (Vector<String>[]) new Vector[3];
向量结果向量数组[]=(向量[])新向量[3];

在名称中包含类型是不常见的(我怀疑这会引起争议!),为什么不直接将其称为“结果”,让类型系统担心类型呢?

使用反射,它将是:

    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);
    }
Vector[]ArrayOfVector=
(Vector[])java.lang.reflect.Array.newInstance(Vector.class,size);
fill(ArrayOfVector,newVector());
对于(向量v:阵列向量){
系统输出打印Ln(v);
}
或者,您可以使用ArrayList,然后使用

将其包装。您还可以创建:

Vector<Vector<String>> Result_Vector_Array=new Vector<Vector<String>>( );
Vector Result\u Vector\u Array=new Vector();

或者您可以用其他集合替换向量。

我建议保留集合,执行以下操作

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

然后,您可以将泛型与构造函数一起使用,并实际使用相同的效果

如果您想使用同步ArrayList,可以使用java.util.Collections中的方法

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);
ArrayList a1=新的ArrayList();
ArrayList a2=新的ArrayList();
ArrayList a3=新的ArrayList();
ArrayList数组[]=(ArrayList[])新建ArrayList[3];
数组[0]=Collections.synchronizedList(a1);
数组[1]=Collections.synchronizedList(a2);
数组[2]=Collections.synchronizedList(a3);
由于,JVM在运行时不知道您有一个
向量
字符串。它所能做的最好的事情就是创建一个“原始”向量。它不能保证所有的
Vector
s实际上都包含
String
s。这就是为什么您会从IDE收到警告

正如jgubby所建议的那样,解决这个问题的一种方法是将其抛出。另一种方法是将
列表
放入
向量
中,而不是数组

但是,更重要的是,为什么阵列只能有3个项目?创建一个包含三个字段的类来放入
向量
,不是更好吗?有了三个项目,这就不需要做太多的工作了,而且您还可以为这三个元素中的每一个添加一个有用的名称,这将使您的代码更加清晰


此外,自Java 6以来,存在许多有用的新同步
列表
实现,这些实现的性能可能比
向量
更好,例如,或者将常规的
列表
包装在一个数组中。

我应该知道您将在该数组上使用多线程吗

如果不是,则不必担心同步问题

我想:

    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" );
listOfLists=newarraylist();
List firstVector=new ArrayList();
第一向量。添加(“一”);
firstVector.add(“两”);
添加(第一个向量);
System.out.println(listOfLists.get(0).get(0)=“一”);
System.out.println(listOfLists.get(0.get(1)=“2”);

打印true,true

什么是字符串向量?向量不是不推荐使用吗?请改用ArrayList!!!开始改用resultVectorArray名称!!!!;)Vector未被弃用。很少有人反对,我不明白为什么。通用类型在哪里?String是一个具体的类,若我们参数化Vector,Vector也是。或者?谢谢,我使用这种方法是因为我知道数组的维数,但不知道向量中有多少个元素,向量会随着它们的移动而增长,直到工作完成,我才知道它们的大小。有更好的解决方案吗?创建一个类!是的,好主意,这为更多的事情打开了大门,谢谢!因为您无法创建一个数组作为向量结果_Vector_array[]=(Vector[])新向量[3];