2015-05-31 55 views
2

我完全新的節目,我有String數組:如何刪除String數組或ArrayList中相似的元素

String dates[] = {"01-01-1993", "19-11-1993", "01-01-1993", "03-03-2000", "03-03-2000"}; 

在上述陣列dates[0] == dates[2]dates[3] == dates[4],我想刪除重複值這重複,我想程序產生結果是這樣的:

dates[] = {"01-01-1993", "19-11-1993", "03-03-2000"} 

一些使用ArrayList概念有些是使用複雜for loops,我很困惑,所以不需經過d請幫助完成上述任務。

在此先感謝。

+1

你不得不使用一個數組?你可以使用一個不允許重複的HashSet。 –

回答

5

您可以使用Set刪除重複項。

Set<T> dateSet = new HashSet<T>(Arrays.asList(dates)); 

dateSet將只包含唯一的值。

如果你需要回到一個數組

dates = dateSet.toArray(new String[dateSet.size()]); 
+4

或LinkedHashSet以保留訂單 – Robert

+0

It's Working ..非常感謝 – JayaSantoshKumar

5

你的問題提出了幾點:

  1. 在一般情況下,這類藏品的操縱更容易和更清潔的,如果你使用集合類(Set,List等)。例如,一組保證唯一性的元素:

    String dates[] = {"01-01-1993", "19-11-1993","01-01-1993","03-03-2000","03-03-2000"}; 
    Set<String> uniqueDates = new HashSet<>(Arrays.asList(dates)); 
    

但是HashSet的是無序;如果你迭代uniqueDates,你得到後面的順序是任意的。如果順序很重要,你可以使用LinkedHashSet:

Set<String> orderedUniqueDates = new LinkedHashSet<>(Arrays.asList(dates)); 
  • 基本集合來與Java都還不錯;但如果你使用谷歌的番石榴庫(https://github.com/google/guava),它會真的不錯,你可以做真正強大的東西就像找到套交叉口,設置不同等:

    Set<String> uniqueDates = Sets.newHashSet(dates); 
    
  • 更根本的是,String是一個非常糟糕的數據類型選擇來表示日期。考慮使用java.util.Date或(如果使用8之前的Java版本)org.joda.time.DateTime(http://www.joda.org/joda-time/)。這不僅會給你類型安全,並確保你的數據確實是所有的日期,但你可以做一些事情,如排序。

  • +0

    甚至更​​好的Java 8'java.time'包。 –

    +0

    你的代碼是好的...使用LinkedHashSet我們可以得到排序列表 – JayaSantoshKumar

    1

    使用Java 8,你可以做到以下幾點:

    String dates[] = {"01-01-1993", "19-11-1993", "01-01-1993", "03-03-2000", "03-03-2000"}; 
    dates = Arrays.stream(dates).distinct().toArray(String[]::new); 
    
    +0

    你的代碼太簡單了謝謝哥們:)它的工作 – JayaSantoshKumar

    1

    這將工作簡單地

    Set<T> tempSet= new HashSet<T>(Arrays.asList(dates)); 
        String[] dates= tempSet.toArray(new String[tempSet.size()]);//copy distinct values 
    
    +0

    哇Rajan謝謝你..你的代碼也被簡化了。 – JayaSantoshKumar