从ArrayList

时间:2018-07-31 02:59:23

标签: java arraylist collections

我正在尝试了解有关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()方法,但是无效。

我知道代码不是完美的,并且可能有更好的方法来执行我在此处尝试执行的操作,但是对此我将深表感谢。

1 个答案:

答案 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}}