2016-12-12 52 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

謝謝你們,它實際上工作! –