2016-12-12 17 views
-2

我想通过发现ArrayList中的类似项目位置来过滤ArrayList,以便我可以获取重复项目的索引位置。在Java Arraylist中重复项目的索引

有了这样一个清单:

List = ['A', 'B', 'A', 'C', 'E', 'A'] 

我希望它给我:

index [0, 2, 5] // A 
index [1] // B 
index [3] // C 
index [4] // E 
+3

到目前为止,你已经尝试过什么? – Meenal

+0

我试图检查并找到重复的项目,并将其放入不同的数组中,然后使用这些值逐个删除重复项并再次搜索。如果值1(来自重复数组)与当前索引的值相匹配//在这里做一些事情,但可悲的是,如果这里的语句只运行一次,则不起作用 –

+0

分享您的代码.. – Meenal

回答

2
Map<Character, List<Integer>> indexes = new HashMap<>(); 
for (int i = 0; i < list.size(); i++) { 
    indexes.computeIfAbsent(list.get(i), c -> new ArrayList<>()).add(i); 
} 
System.out.println(indexes); 
// {A=[0, 2, 5], B=[1], C=[3], E=[4]} 
0
char[] list = {'A', 'B', 'A', 'C', 'E', 'A'}; 
    Map<Character, List<Integer>> indexes = new HashMap<>(); 
    for (int i = 0; i < list.length; i++) { 
     if(indexes.get(list[i]) != null) 
     { 
      List<Integer> indexList=indexes.get(list[i]); 
      indexList.add(i); 
      indexes.put(list[i],indexList); 
     } 
     else 
     { 
      List<Integer> indexList = new ArrayList<>(); 
      indexList.add(i); 
      indexes.put(list[i],indexList); 
     } 
    } 
    System.out.println(indexes); 
    // {E=[4], A=[0, 2, 5], B=[1], C=[3]} 
+0

这么多冗余的代码。在循环中你需要的是:'List indexList = indexes.get(list [i]); if(indexList == null)indexes.put(list [i],indexList = new ArrayList <>()); indexList.add(i);' – shmosel

+0

谢谢你们,它实际上工作! –