如何从String数组或ArrayList中删除类似的元素

时间:2015-05-31 11:41:38

标签: java string arraylist

我是编程新手,我有String数组:

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而我感到困惑,所以请你帮忙完成上述任务。

提前致谢。

4 个答案:

答案 0 :(得分:5)

您可以使用Set删除重复项。

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

dateSet只包含唯一值。

如果你需要回到数组

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

答案 1 :(得分:5)

你的问题提出了几点:

  1. 通常,如果使用Collection类(Set,List等),这种对集合的操作会更容易和更清晰。例如,Set保证元素的唯一性:

    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));
    
  2. 但是HashSet是无序的;如果你遍历uniqueDates,你获得后退的顺序是任意的。如果订单很重要,您可以使用LinkedHashSet:

    Set<String> orderedUniqueDates = new LinkedHashSet<>(Arrays.asList(dates));
    
    1. Java附带的基本集合非常好;但是如果你使用谷歌的Guava库(https://github.com/google/guava),那么真的很好,你可以做一些非常强大的事情,比如找到集合的交集,设置差异等等。: p>

      Set<String> uniqueDates = Sets.newHashSet(dates);
      
    2. 更重要的是,String是表示日期的数据类型的非常差的选择。考虑使用java.util.Date或(如果使用8之前的Java版本)org.joda.time.DateTime(http://www.joda.org/joda-time/)。这不仅可以确保您的类型安全,还可以确保您的数据确实是所有日期,但您可以执行排序等操作。

答案 2 :(得分:1)

使用Java 8,您可以执行以下操作:

vector<double>aa;
aa.push_back(a);    //since initial size is zero, this (in effect) resizes and copies a to aa[0]
aa.push_back(b);    //since size is now 1, this (in effect) resizes and copies b to aa[1]
aa.push_back(c);    //since size is now 2, this (in effect) resizes and copies c to aa[1]

答案 3 :(得分:1)

这将简单地起作用

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