2015-10-12 36 views
3

我已經寫了下面的代碼,即使我使用了set,​​我也得到了所有的重複項。如何刪除以下java代碼中的重複項?

private void validatingpswwithpattern(String password) throws IOException 

    { 
      List<String[]> list=new ArrayList<String[]>(); 
      list.add(new String[]{"raj","duvva","sathish"}); 
      list.add(new String[]{"raj","duvva","sathish"}); 
      list.add(new String[]{"raj","duvva","sathish"}); 
      list.add(new String[]{"raj","duvva","sathish"}); 
      list.add(new String[]{"raj","duvva","sathish"}); 
      list.add(new String[]{"raj","duvva","sathish"}); 


      Set<String[]> hs = new HashSet<String[]>(); 
      hs.addAll(list); 
      list.clear(); 
      list.addAll(hs); 
      System.out.println(list); 
} 
+0

您正在向集合中添加一個數組,這些數組通過引用進行比較。這意味着所有的對象都是不同的,因爲它們都有不同的引用。 – Stanislav

+0

訪問以下鏈接。它可能會幫助你http://stackoverflow.com/a/21985571/4944490 –

回答

6

由於陣列不從Object類中重寫的hashCodeequals默認的實現,HashSet是無用的消除重複。

您可以使用TreeSet並提供一個Comparator<String[]>來確定何時兩個String陣列相等。

TreeSet<String[]> set = new TreeSet<> (new Comparator<String[]>() { 
    public int compare(String[] o1, String[] o2) 
    { 
    // write here logic to determine whether o1<o2 (return -1) or 
    //          o1>o2 (return 1) or 
    //          o1 is equal to o2 (return 0) 
    } 
}); 
set.addAll(list); 
0

您可以通過以下方式完成。如果你想刪除重複的元素,那麼你可以用這種方式做一些事情。

List<String[]> list=new ArrayList<String[]>(); 
list.add(new String[]{"raj","duvva","sathish"}); 
list.add(new String[]{"raj","duvva","sathish"}); 
list.add(new String[]{"raj","duvva","sathish"}); 
list.add(new String[]{"raj","duvva","sathish"}); 
list.add(new String[]{"raj","duvva","sathish"}); 
list.add(new String[]{"raj","duvva","sathish"}); 

TreeSet<String[]> set = new TreeSet<String[]>(new Comparator<String[]>() {  
    @Override 
    public int compare(String[] o1, String[] o2) { 
    return Arrays.equals(o1, o2)? 0 : 1; 
    } 
}); 
set.addAll(list); 

list = new ArrayList<String[]>(set); 
0

如果你想使用HashSet需要使用Arrays.asList來包裝你String[]List