在Java中,整型数组的ArrayList

67

我对ArrayList的概念还不了解。我写了一个简短的程序,如下所示:

ArrayList<int[]> arl=new ArrayList<int[]>();
int a1[]={1,2,3};
arl.add(0,a1);
System.out.println("Arraylist contains:"+arl.get(0));

它给出的输出是:Arraylist contains:[I@3e25a5

现在我的问题是:

  1. 如何显示正确的值,即1 2 3。
  2. 如何访问数组a1的单个元素,例如如果我想知道a1 [1]处的值。

3
请注意:ArrayList并不意味着“数组列表”,而是指在内部使用数组的列表。因此,您可以使用ArrayList<Integer>并添加您的值:arl.add(Integer.valueOf(1); ... - hage
1
我理解这个问题是想要一个整数数组列表。它似乎非常明确。他们试图获取(0)并期望该值为[1,2,3]。大多数答案似乎都在回答错误的问题。 - Baxissimo
12个回答

85

首先,对于初始化容器而言,你不能使用基本类型(即int;你可以使用int[],但是如果你只想要一个整数数组,我认为那没有用处)。相反,你应该使用Integer,如下所示:

ArrayList<Integer> arl = new ArrayList<Integer>();

要添加元素,只需使用add函数:

arl.add(1);  
arl.add(22);
arl.add(-2);

最后,但同样重要的是,要打印 ArrayList ,您可以使用 toString() 的内置功能:

System.out.println("Arraylist contains: " + arl.toString());  

如果你想访问数组中从0到长度减1的索引位置 i 处的元素,可以使用以下方法:

int i = 0; // Index 0 is of the first element
System.out.println("The first element is: " + arl.get(i));

在开始使用Java容器之前,我建议先阅读一下相关的资料。


25

更加简单。

List<Integer> arrayIntegers = new ArrayList<>(Arrays.asList(1,2,3));

arrayIntegers.get(1);

第一行创建对象,在构造函数中向List传递一个数组参数。

第二行有List类的所有方法:.get(...)。


注意:如果您试图将 int[] 转换为 List<Integer>,则此方法无效。 - ArcX

25

2
回答问题2:arl.get(0)[i] - Miquel

9

背景信息:

    List<int[]> intArrays=new ArrayList<>();
    int anExample[]={1,2,3};
    intArrays.add(anExample);

通过索引在ArrayList中检索单个int []数组

    int[] anIntArray = intArrays.get(0); //'0' is the index
    //iterate the retrieved array an print the individual elements
    for (int aNumber : anIntArray ) { 
        System.out.println("Arraylist contains:" + aNumber );
    }

要从ArrayList中检索所有int[]数组:

    //iterate the ArrayList, get and print the elements of each int[] array  
    for(int[] anIntArray:intArrays) {
       //iterate the retrieved array an print the individual elements
       for (int aNumber : anIntArray) {
           System.out.println("Arraylist contains:" + aNumber);
       }
}

输出格式化可以基于这种逻辑进行。祝你好运!

@SumitRamteke - 你的编辑使得这篇帖子实际上不再是对问题的回答。 - mtebong
如果让你有这种感觉,我很抱歉。我希望你已经不同意我的编辑,尽管这是一种个人看待解决方案的方式。我进行了更改,以便让它理解你所写的内容是正确的,但是以通用的方式。只是遵循社区惯例,请不要误解。 - Sumit Ramteke
这真的帮了我很多。我一直在试图弄清楚为什么 ArrayList<long[2]> a = new ArrayList<long[2]>() 不起作用,感觉自己的头都要撞破了。我发现 Java 语法有些复杂。我猜 Java 认为 long[1]、long[2] 和 long[3] 都是同一种类型? - KANJICODER

5

在Java中,数组是一个对象。因此arl.get(0)返回一个原始的int[]对象,在调用System.out时以ASCII码的形式呈现。

因此,对于你的第一个问题,答案是

System.out.println("Arraylist contains:"+Arrays.toString( arl.get( 0 ) ) );

如果您正在寻找特定元素,则必须像这样引用返回的int[]对象。对于您的第二个问题的答案可能是:
    int[] contentFromList = arl.get(0);
    for (int i = 0; i < contentFromList.length; i++) {
        int j = contentFromList[i];
        System.out.println("Value at index - "+i+" is :"+j);
    }

4

你需要使用<Integer>而不是<int>

int a1[] = {1,2,3};
ArrayList<Integer> arl=new ArrayList<Integer>();
for(int i : a1) {
    arl.add(i);        
    System.out.println("Arraylist contains:" + arl.get(0));
}

他要求的是一个数组列表,而不是整数列表。 - Baxissimo
但是如果你读了他的问题,你会明白他是新手,只是想要获取 int 列表并通过访问特定索引来获取值)) - Nour
我已经阅读了它,似乎很清楚他想要一个整数数组列表。例如,他区分 arl[0]a1[0] - composerMike

2

大家都是正确的。您不能直接打印int[]对象,但也没有必要不使用整数数组的ArrayList。

可以使用:

Arrays.toString(arl.get(0))

如果您想在字符串对象中间插入逗号等内容,就需要将其拆分为子字符串。

从整数数组的角度来看,这是我认为amv所期望的内容。

System.out.println("Arraylist contains: " 
    + arl.get(0)[0] + ", " 
    + arl.get(0)[1] + ", " 
    + arl.get(0)[2]);

这个答案对于amv来说有点晚了,但对其他人可能仍然有用。

1

针对那些经验不足的人,我决定添加一个示例来演示如何根据此问题(此处)输入和输出整数数组的ArrayList。

    ArrayList<Integer[]> arrayList = new ArrayList<Integer[]>();
    while(n > 0)
    {
        int d = scan.nextInt();
       Integer temp[] = new Integer[d];
        for (int i = 0 ; i < d ; i++)
        {
            int t = scan.nextInt();
            temp[i]=Integer.valueOf(t);
        }
        arrayList.add(temp);
        n--;
    }//n is the size of the ArrayList that has been taken as a user input & d is the size 
    //of each individual array.

     //to print something  out from this ArrayList, we take in two 
    // values,index and index1 which is the number of the line we want and 
    // and the position of the element within that line (since the question
    // followed a 1-based numbering scheme, I did not change it here)

    System.out.println(Integer.valueOf(arrayList.get(index-1)[index1-1]));

由于这个问题上的回答,我得到了正确的答案。我相信这足以令提问者满意,虽然有点晚,并且可以为那些经验较少的人提供解释。

0
ArrayList<Integer> list = new ArrayList<>();
int number, total = 0;

for(int i = 0; i <= list.size(); i++){
    System.out.println("Enter number " + (i + 1) + " or enter -1 to end: ");
    number = input.nextInt();

    list.add(number);

    if(number == -1){
        list.remove(list.size() - 1);
        break;
    }
}
System.out.println(list.toString());

for(int i: list){
    System.out.print(i + "  ");
    total+= i;
}
System.out.println();
System.out.println("The sum of the array content is: " + total);

0

Integer是包装类,int是原始数据类型。在ArrayList中最好使用Integer。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接