我是编程新手,我有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
而我感到困惑,所以请你帮忙完成上述任务。
提前致谢。
答案 0 :(得分:5)
您可以使用Set删除重复项。
Set<T> dateSet = new HashSet<T>(Arrays.asList(dates));
dateSet只包含唯一值。
如果你需要回到数组
dates = dateSet.toArray(new String[dateSet.size()]);
答案 1 :(得分:5)
你的问题提出了几点:
通常,如果使用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));
但是HashSet是无序的;如果你遍历uniqueDates,你获得后退的顺序是任意的。如果订单很重要,您可以使用LinkedHashSet:
Set<String> orderedUniqueDates = new LinkedHashSet<>(Arrays.asList(dates));
Java附带的基本集合非常好;但是如果你使用谷歌的Guava库(https://github.com/google/guava),那么真的很好,你可以做一些非常强大的事情,比如找到集合的交集,设置差异等等。: p>
Set<String> uniqueDates = Sets.newHashSet(dates);
更重要的是,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