我正在尝试了解有关ArrayList
以及总体上有关集合框架的一些基础知识。
在下面的代码中,我要实现的目标是,将一堆不同DataTypes的ArrayList存储在另一个ArrayList
中(类似于多维数组的概念),然后尝试检索数据。
ArrayList内的ArrayList
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class Testing {
private static Scanner sc;
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
////////////////////////////////////Variables/////////////////////////////////////
String[] string;
Integer[] integer = new Integer[5];
Boolean[] bool = new Boolean[5];
Byte[] by = new Byte[5];
Double[] doub = new Double[5];
sc = new Scanner(System.in);
/////////////////////////////////////Inputs///////////////////////////////////////
System.out.println("Enter an Array of String : ");
string = sc.nextLine().split("[ ]"); //Entering dynamic String inputs for the String Types
System.out.println("Enter an Array of Integer : ");
for (int i = 0; i < integer.length; i++) {
integer[i] = sc.nextInt(); //Entering dynamic Integer inputs for the Integer Types
}
System.out.println("Enter an Array of Boolean : ");
for (int i = 0; i < bool.length; i++) {
bool[i] = sc.nextBoolean(); //Entering dynamic Boolean inputs for the Boolean Types
}
System.out.println("Enter an Array of Byte : ");
for (int i = 0; i < by.length; i++) {
by[i] = sc.nextByte(); //Entering dynamic Byte inputs for the Byte Types
}
System.out.println("Enter an Array of Double : ");
for (int i = 0; i < doub.length; i++) {
doub[i] = sc.nextDouble(); //Entering dynamic Double inputs for the Double Types
}
////////////////////////////////////Operations///////////////////////////////////////
ArrayList a1 = new ArrayList<String>();
a1.add(string); //Inserting string array into ArrayList a1
ArrayList a2 = new ArrayList<Integer>();
a2.add(integer); //Inserting integer array into ArrayList a2
ArrayList a3 = new ArrayList<Boolean>();
a3.add(bool); //Inserting bool array into ArrayList a3
ArrayList a4 = new ArrayList<Byte>();
a4.add(by); //Inserting by array into ArrayList a4
ArrayList a5 = new ArrayList<Double>();
a5.add(doub); //Inserting doub array into ArrayList a5
ArrayList AL = new ArrayList<>();
AL.add(a1); //Adding ArrayList a1 to the ArrayList AL
AL.add(a2); //Adding ArrayList a2 to the ArrayList AL
AL.add(a3); //Adding ArrayList a3 to the ArrayList AL
AL.add(a4); //Adding ArrayList a4 to the ArrayList AL
AL.add(a5); //Adding ArrayList a5 to the ArrayList AL
System.out.println("Done");
/////////////////////////////////////Displaying Output/////////////////////////////////////
for (Object object : AL) {
Iterator<ArrayList> i = ((ArrayList)object).iterator();
while(i.hasNext()) //Run while the individual ArrayList has more elements left
System.out.println(i.next());
}
}
}
以下是我提供的输入
Enter an Array of String :
1 2 3 4 5
Enter an Array of Integer :
1 2 3 4 5
Enter an Array of Boolean :
true true true true true
Enter an Array of Byte :
1 2 3 4 5
Enter an Array of Double :
1 2 3 4 5
Done
输出
[Ljava.lang.String;@1e643faf
[Ljava.lang.Integer;@6e8dacdf
[Ljava.lang.Boolean;@7a79be86
[Ljava.lang.Byte;@34ce8af7
[Ljava.lang.Double;@b684286
我的问题是,为什么我要获得单个ArrayList
的哈希码值,而不是我期望单个数组列表中的数据?
我尝试使用Arrays.deepToString()
方法,但是无效。
我知道代码不是完美的,并且可能有更好的方法来执行我在此处尝试执行的操作,但是对此我将深表感谢。
答案 0 :(得分:2)
更新 实时工作示例:https://ideone.com/uNgGQ0
这里的问题是,由于您将不同类型的ArrayList<Object>
存储到 for (Object object : AL) {
ArrayList temp = (ArrayList) object;
for (Object innerObject : temp) {
if (innerObject instanceof String[]) {
printArray((String[]) innerObject);
} else if (innerObject instanceof Integer[]) {
printArray((Integer[]) innerObject);
} else if (innerObject instanceof Byte[]) {
printArray((Byte[]) innerObject);
} else if (innerObject instanceof Boolean[]) {
printArray((Boolean[]) innerObject);
} else if (innerObject instanceof Double[]) {
printArray((Double[]) innerObject);
}
}
}
private static void printArray(Object[] obj) {
for (Object ob : obj) {
System.out.print(ob + ",");
}
System.out.println();
}
中,而ArrayList的情况是它们最终将数据存储在Array中。
因此遍历它们并非像我们过去遍历单个数据类型的List一样简单。我对您的代码进行了一些调整,现在可以正常使用了。
Enter an Array of String :
1 2 3 4 5
Enter an Array of Integer :
1 2 3 4 5
Enter an Array of Boolean :
true true true true true
Enter an Array of Byte :
1 2 3 4 5
Enter an Array of Double :
1 2 3 4 5
Done
1,2,3,4,5,
1,2,3,4,5,
true,true,true,true,true,
1,2,3,4,5,
1.0,2.0,3.0,4.0,5.0,
输出
{{1}}