我需要String
的动态数组。我使用ArrayList
作为我的集合类型。无论我尝试什么方法,我总是遇到同样的问题:我对add()
的最后一次调用导致所有以前的添加失败。我尝试了几种方法,但仍然有同样的问题。
这是我的测试代码:
package tests;
import org.apache.cocoon.xml.XMLUtils;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class TestArray
{
public static void main(String[] args)
{
List<String> array1 = new ArrayList();
String e2[] = new String[2];
// Array 1
array1.clear();
array1.add("A");
array1.add("B");
array1.add("C");
array1.add("D");
int nbEnregArray1 = array1.size();
System.out.println("Nb Enreg Array1 : " +array1.size());
for (int i = 0; i < nbEnregArray1; i++) {
System.out.println("Enreg " + i + " : " + array1.get(i));
}
// ================================
// Array 2
// ================================
ArrayList<String[]> array2 = new ArrayList<>();
array2.clear();
e2[0] = "W";
e2[1] = "X";
array2.add(0, e2);
System.out.println("Array2 : Enregistrement rang 0 " + " : " + array2.get(0)[0] + " / " + array2.get(0)[1]);
e2[0] = "C";
e2[1] = "V";
array2.add(1, e2);
System.out.println("Array2 : Enregistrement rang 0 " + " : " + array2.get(0)[0] + " / " + array2.get(0)[1]);
System.out.println("Array2 : Enregistrement rang 1 " + " : " + array2.get(1)[0] + " / " + array2.get(1)[1]);
e2[0] = "B";
e2[1] = "N";
array2.add(2, e2);
System.out.println("Array2 : Enregistrement rang 0 " + " : " + array2.get(0)[0] + " / " + array2.get(0)[1]);
System.out.println("Array2 : Enregistrement rang 1 " + " : " + array2.get(1)[0] + " / " + array2.get(1)[1]);
System.out.println("Array2 : Enregistrement rang 2 " + " : " + array2.get(2)[0] + " / " + array2.get(2)[1]);
int nbEnregArray2 = array2.size();
System.out.println("Nb Enreg Array2 : " + nbEnregArray2);
for (int i = 0; i < nbEnregArray2; i++) {
System.out.println("Array2 : rang " + i + " : " + array2.get(i)[0] + " / " + array2.get(i)[1]);
}
// ================================
// Array3
// ================================
ArrayList<ArrayList<String>> array3 = new ArrayList<>();
ArrayList<String> a3 = new ArrayList();
array3.clear();
String a31, a32, a33;
a3.clear();
a31 = "A";
a32 = "Z";
a3.add(a31);
a3.add(a32);
array3.add(a3);
a3.clear();
a31 = "E";
a32 = "R";
a3.add(a31);
a3.add(a32);
array3.add(a3);
a3.clear();
a31 = "T";
a32 = "Y";
a3.add(a31);
a3.add(a32);
array3.add(a3);
for (int i = 0; i < array3.size(); i++) {
System.out.println("Array3 : rang " + i + " : " + array3.get(i).get(0) + " / " + array3.get(i).get(1));
}
// ================================
// List
// ================================
List<List<String>> l = new LinkedList<>();
List<String> el = new LinkedList<>();
l.clear();
String l1, l2, l3;
el.clear();
l1 = "A";
l2 = "Z";
l3 = "E";
el.add(l1);
el.add(l2);
el.add(l3);
l.add(el);
el.clear();
l1 = "R";
l2 = "T";
l3 = "Y";
el.add(l1);
el.add(l2);
el.add(l3);
l.add(el);
el.clear();
l1 = "U";
l2 = "I";
l3 = "O";
el.add(l1);
el.add(l2);
el.add(l3);
l.add(el);
for (int i = 0; i < l.size(); i++) {
System.out.println("l : rang " + i + " : " + l.get(i).get(0) + " / " + l.get(i).get(1));
}
}
}
答案 0 :(得分:1)
你的问题是你要添加相同的List三次,所以你的外部List最终只有三个对同一个东西的引用。
您需要为每次插入制作一个全新的列表。
答案 1 :(得分:0)
首先,当您声明如下列表时:
List<String> array1 = new ArrayList();
为什么你使用clear(),即使你没有添加任何元素。
当您将列表添加到其他列表时,当您清除将要引用的列表时,将使用clear()时它们的值将消失。所以价值被覆盖了
前 - :
ArrayList<ArrayList<String>> array3 = new ArrayList<>();
ArrayList<String> a3 = new ArrayList();
array3.clear(); //no need of this as it has no elements
a3.clear(); //no need of this as it has no elements
String a31, a32, a33;
a31 = "A";
a32 = "Z";
a3.add(a31);
a3.add(a32);
array3.add(a3);
a3.clear();
a31 = "E";
a32 = "R";
a3.add(a31);
a3.add(a32);
array3.add(a3);
a3.clear();
a31 = "T";
a32 = "Y";
a3.add(a31);
a3.add(a32);
array3.add(a3);
您正在清除旧值并将新值设置为仅使用新值引用的对象。
如果您想让所有值都在最后一个列表中,那么您需要更改clear() as:
ArrayList<ArrayList<String>> array3 = new ArrayList<ArrayList<String>>();
ArrayList<String> a3 = new ArrayList();
String a31, a32, a33;
a31 = "A";
a32 = "Z";
a3.add(a31);
a3.add(a32);
array3.add(a3);
a3 = new ArrayList<String>();
a31 = "E";
a32 = "R";
a3.add(a31);
a3.add(a32);
array3.add(a3);
a3 = new ArrayList<String>();
a31 = "T";
a32 = "Y";
a3.add(a31);
a3.add(a32);
array3.add(a3);
你将获得所需的最终名单!! 希望它有助于解决您的问题。