【问题标题】:ArrayList index?数组列表索引?
【发布时间】:2012-12-02 13:28:31
【问题描述】:

如何找到存储在 ArrayList 中的 int 的索引?

public static void thisClass(int max, int[] queue1, ArrayList<ArrayList<Integer>> aList) {

    int[] anArr = Arrays.copyOf(queue1, queue1.length);
    Arrays.sort(anArr);

    ... //sorts ints into groups (ArrayList of ArrayLists)

    }

    int n = 0;
    for (ArrayList<Integer> t : newList) {
        String itemS = "";
        int total = 0;
        for (int index : t) {
            int value = index; //isn't returning index of arrayList - its returning the value
            if (!itemS.isEmpty()) {
                itemS += ", ";
            }
            itemS += index + ":" + value; //want it to output "element Position : element Value
            total += value;
        }
    }
}

【问题讨论】:

    标签: java arraylist indexing


    【解决方案1】:

    您正在使用enhanced for loop,也称为foreach 循环。在这个循环中,循环内没有定义索引变量;它只是数组/Iterable 本身中的值。

    要获取索引,您必须使用传统的 for 循环:

    ArrayList<Integer> myNumbers = new ArrayList<>();
    myNumbers.add(123);
    myNumbers.add(456);
    myNumbers.add(789);
    
    for(int i = 0; i < myNumbers.size(); i++) {
        int value = myNumbers.get(i);
        if(value == 789) {
            System.out.println("Found 789 at index " + i);
            break;
        }
    }
    

    【讨论】:

    • +1。或者他可以将一个变量初始化为 0 并在每次迭代时递增它,这在 LinkedList 的情况下会更好,其中get() 是 O(N) 而不是 O(1)。
    • 这似乎是最有意义的。但是,我似乎更喜欢使用for-each loop,我刚刚决定在这种情况下不跟踪索引。下次我一定会改为实现for loop。谢谢。
    【解决方案2】:

    您需要使用indexOf(object) 来获取index

    假设您使用的是大于 java5。否则你需要创建一个 Integer 对象而不是原始 int。

    增强的 for 循环在内部使用迭代器,因此无法获取索引。

    【讨论】:

      【解决方案3】:

      - 使用indexOf() 方法解决这个问题.......

      for (ArrayList<Integer> t : newList){
      
            int index = newList.indexOf(t);
      
            System.out.println(index);      // Use an array or list to store these 
                                            // index if you want.
      
      
      }
      

      【讨论】:

      • 我之前也尝试过,但会跟踪数组列表的数组列表中元素的索引。不是排序/分组之前的初始索引集...
      猜你喜欢
      • 1970-01-01
      • 2012-08-27
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2018-05-29
      相关资源
      最近更新 更多