从具有重复性的排序数组创建未排序集时获取未排序集
Getting an unsorted set when creating it from a sorted array with duplicity
我正在使用一个包含一些重复值的排序数组,然后为了简单地消除重复性,我将每个值添加到集合中。当我从一个排序的数组创建一个集合时,为什么我没有得到一个排序的集合?
这是我的代码:
Set<Integer> set = new HashSet<Integer>();
for(int score: scores)
if(!(set.contains(score)))
set.add(score);
System.out.println(set);
分数值是100 100 50 40 40 20 10
预期输出:[100, 50, 40, 20, 10]
实际输出:[50, 100, 20, 40, 10]
如果要对 Set 进行排序,请使用 TreeSet
。 TreeSet 是一个排序集实现,默认由 Java 给出。官方文档中有更多信息 https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html
Set<Integer> set = new TreeSet<Integer>();
for(int score: scores)
//if(!(set.contains(score))) # this is not needed as set already handles duplicates
set.add(score);
System.out.println(set);
我看到你在做 if(!(set.contains(score)))
这个比较。那为什么不去列一个清单呢?列表将保持插入顺序。
int scores[]= {100,100,50,40,40,20,10};
List<Integer> list=new ArrayList<Integer>();
for(int score: scores)
if(!(list.contains(score)))
list.add(score);
System.out.println(list);
}
输出::
[100, 50, 40, 20, 10]
您可以结合接口 SortedSet
with Collections.reverseOrder()
来获得如下所示的反向顺序集:
int[] scores = new int[]{100, 100, 50, 40, 40, 20, 10};
SortedSet<Integer> set = new TreeSet<>(Collections.reverseOrder());
for (int score : scores) {
set.add(score);
}
System.out.println(set); //<--it will print [100, 50, 40, 20, 10]
我正在使用一个包含一些重复值的排序数组,然后为了简单地消除重复性,我将每个值添加到集合中。当我从一个排序的数组创建一个集合时,为什么我没有得到一个排序的集合?
这是我的代码:
Set<Integer> set = new HashSet<Integer>();
for(int score: scores)
if(!(set.contains(score)))
set.add(score);
System.out.println(set);
分数值是100 100 50 40 40 20 10
预期输出:[100, 50, 40, 20, 10]
实际输出:[50, 100, 20, 40, 10]
如果要对 Set 进行排序,请使用 TreeSet
。 TreeSet 是一个排序集实现,默认由 Java 给出。官方文档中有更多信息 https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html
Set<Integer> set = new TreeSet<Integer>();
for(int score: scores)
//if(!(set.contains(score))) # this is not needed as set already handles duplicates
set.add(score);
System.out.println(set);
我看到你在做 if(!(set.contains(score)))
这个比较。那为什么不去列一个清单呢?列表将保持插入顺序。
int scores[]= {100,100,50,40,40,20,10};
List<Integer> list=new ArrayList<Integer>();
for(int score: scores)
if(!(list.contains(score)))
list.add(score);
System.out.println(list);
}
输出::
[100, 50, 40, 20, 10]
您可以结合接口 SortedSet
with Collections.reverseOrder()
来获得如下所示的反向顺序集:
int[] scores = new int[]{100, 100, 50, 40, 40, 20, 10};
SortedSet<Integer> set = new TreeSet<>(Collections.reverseOrder());
for (int score : scores) {
set.add(score);
}
System.out.println(set); //<--it will print [100, 50, 40, 20, 10]