【问题标题】:ArrayLists and indexers in JavaJava 中的 ArrayList 和索引器
【发布时间】:2011-01-22 00:50:05
【问题描述】:

在 Java 中可以做到这一点吗?也许我使用了错误的语法?

ArrayList<Integer> iAL = new ArrayList<Integer>();
iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 }));

for (int i = 0; i < iAL.size(); ++i) {
    System.out.println(iAL[i]); //<-------- HERE IS THE PROBLEM
}

另外,有没有可能做类似的事情

iAL.addAll( new int[] {1, 2, 3, 4, 5} );

就像在 c# 上看到的那样?

谢谢

【问题讨论】:

    标签: c# java arrays arraylist


    【解决方案1】:

    试试System.out.println(iAL.get(i));。因为它是List,而不是array

    【讨论】:

    • 所以Java中的列表不能使用索引器?可能和Java不支持运算符重载有关?
    • 是的,你是对的,没有索引器,也没有其他类似的东西:(
    • Java 不支持运算符重载,因此不能将索引运算符 ([]) 用于数组以外的任何内容。
    【解决方案2】:
    ArrayList<Integer> iAL = new ArrayList<Integer>();
    iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 }));
    
    for (int i = 0; i < iAL.size(); ++i) {
        System.out.println(iAL.get(i)); 
    }
    

    阿法伊克

    iAL.addAll(Arrays.asList(new Integer[] {1, 2, 3, 4, 5 })); // 这是最短的解决方案

    【讨论】:

    • Arrays.asList() 接受可变参数参数,因此可以更短。
    • 另外,如果您只是要立即添加这些元素,使用复制构造函数可以进一步缩短内容。
    【解决方案3】:

    另外,有没有可能做类似的事情

    iAL.addAll( new int[] {1, 2, 3, 4, 5} );
    

    足够接近:

    iAL.addAll(Arrays.asList(1, 2, 3, 4, 5));
    

    您的代码中不需要new Integer[]

    【讨论】:

      【解决方案4】:

      不,你必须使用.get(i)[i] 仅适用于数组。但是,如果您不需要其他的索引变量,则最好使用 for-each 语法(根据垃圾神的回答)。

      其次,如果您不调整列表的大小(改变单个元素仍然可以),那么执行以下操作将是完全合理的:

      List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5);
      

      注意,Arrays.asList() 接受可变参数,因此没有理由显式构造数组。

      如果你想要一个可调整大小的列表,以下可能是最短的:

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

      【讨论】:

        【解决方案5】:

        此外,我还要添加关于您的代码的另外两个注释:

        例如,结合其他答案中的一些有用建议

        List<Integer> list = new ArrayList<Integer>();
        list.addAll(Arrays.asList(1, 2, 3, 4, 5 ));
        
        for (Integer i : list) {
            System.out.println(i);
        }
        

        附录:coding to the interface的问题很有意思,Carl的评论特别中肯。使用接口类型List,可以最大限度地减少您使用特定实现的义务。如果需要,您可以稍后切换到任何class that implements List

        【讨论】:

        • 我不明白你的第二点(编码到界面)。这和这有什么关系?
        • 将 iAL 声明为 List 而不是 ArrayList。除非您打算在 ArrayList 中使用一些大小管理方法,否则这可能是个好主意。
        【解决方案6】:

        我会将你的整个代码重构为:

        List<Integer> iAL = Arrays.asList(1, 2, 3, 4, 5 );
        
        for (int i : iAL) {
          System.out.println(i);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-29
          相关资源
          最近更新 更多