2014-03-27 63 views
0

第一種方法找到重複項,第二種將其刪除。 我試過下面的代碼,它不起作用。我不明白爲什麼。要用兩種方法來完成。當我調用這些方法時,它們不會刪除重複項。數組列表不變。我想用兩種方法刪除重複項。如何使用兩種方法從數組列表中刪除重複項?

public static int find(ArrayList<String> s, int i) { 

    for (int j = i + 1; j < s.size(); j = j + 1) { 
     if (s.get(i) == s.get(j)) { 
      return j; 
     } 
    } 

    return -1; 
} 


public static void removeDuplicates(ArrayList<String> s) { 
    for (int i = 0; i < s.size(); i = i + 1) { 
     int foundAt = (find(s, i)); 
     if (foundAt >= 0) { 
      s.remove(i); 
     } 
    } 
} 
+2

任何不使用'Set'的理由? –

+0

...或'.indexOf()'? – fge

+0

這是功課嗎? – rkosegi

回答

1

不要打擾:

public static List<String> removeDups(final List<String> orig) 
{ 
    return new ArrayList<>(new LinkedHashSet<>(orig)); 
} 

(注意使用LinkedHashSet,我們希望保留元迭代排序)

0

你爲什麼不乾脆放棄它在一個集

List<String> listduplicates = new ArrayList<String>(10); 
//add elements to the list 
Set<String> as = new HashSet<String>(listduplicates); 

List<String> listunique = new ArrayList<String>(as.size()); 

listunique現在給獨特的元素

0

如果你想用兩種方法來做到這一點,並按照你同樣的想法,你可以治好你的方法是:

public static int find(List<String> s, int j) { 
     for(int i=j;i<s.size();i++) { 
      if (s.lastIndexOf(s.get(i)) != i) { 
       return i; 
      } 
     } 
     return -1; 
    } 


    public static void removeDuplicates(ArrayList<String> s) { 
     for (int j=0; j<s.size();j++) { 
      int i = -1; 
      while((i=find(s,j))>=0) { 
       s.remove(i); 
      } 
     } 
    } 
0

如果您使用的是Java 8,你可以使用Stream API與distinct()操作以複製重複項:

List<Integer> list = Arrays.asList(5, 3, 6, 5, 4, 6); 
List<Integer> filtered = list.stream().distinct().collect(Collectors.toList()); 
System.out.println("filtered: " + filtered); // [5, 3, 6, 4] 
0

我檢查了您的代碼,它運行良好,並從列表中刪除重複項。您可以更改removeDuplicates方法以刪除稍後在列表中出現的重複項。

public static void removeDuplicates(ArrayList<String> s) { 
      for (int i = 0; i < s.size(); i = i + 1) { 
       int foundAt = (find(s, i)); 
       if (foundAt >= 0) { 
        s.remove(foundAt); 
       } 
      } 
     }