Java TreeSet用法详解
【摘要】 什么是TreeSetTreeSet是实现Set接口的实现类。所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理。TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。 TreeSet的基本使用自然排序的例子,i...
什么是TreeSet
TreeSet是实现Set接口的实现类。所以它存储的值是唯一的,同时也可以对存储的值进行排序,排序用的是二叉树原理。
TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。
TreeSet的基本使用
自然排序的例子,
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<>();
ts.add(2);
ts.add(1);
ts.add(3);
ts.add(2);
ts.add(3);
ts.add(1);
ts.add(2);
System.out.println(ts);
}
}
输出为[1,2,3]
,结果不重复,并且结果是排序的。
自定义比较器的例子:
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
// TreeSet 按字符串长度排序,长度相等则按字符串字典序排序
TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {
// compare方法的o1,o2。o1代表调用的对象,o2代表集合中的对象。
@Override
public int compare(String o1, String o2) {
int num = o1.length() - o2.length();
return num == 0 ? o1.compareTo(o2) : num;
}
});
ts.add("c");
ts.add("cc");
ts.add("cc");
ts.add("a");
ts.add("aa");
ts.add("bbbb");
ts.add("ddddd");
ts.add("zhushy");
ts.add("zhushangyuan");
System.out.println(ts);
}
}
输出结果为:[a, c, aa, cc, bbbb, ddddd, zhushy, zhushangyuan]
TreeSet的遍历
TreeSet不支持快速随机遍历,只能通过迭代器进行遍历!
// 假设set是TreeSet对象
for(Iterator iter = set.iterator(); iter.hasNext(); ) {
iter.next();
}
for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) {
iter.next();
}
// for-each遍历HashSet
// 假设set是TreeSet对象,并且set中元素是String类型
// 转换为数组
String[] arr = (String[])set.toArray(new String[0]);
for (String str:arr)
System.out.printf("for each : %s\n", str);
完整的代码:
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
// TreeSet 按字符串长度排序,长度相等则按字符串字典序排序
TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {
// compare方法的o1,o2。o1代表调用的对象,o2代表集合中的对象。
@Override
public int compare(String o1, String o2) {
int num = o1.length() - o2.length();
return num == 0 ? o1.compareTo(o2) : num;
}
});
ts.add("c");
ts.add("cc");
ts.add("cc");
ts.add("a");
ts.add("aa");
ts.add("bbbb");
ts.add("ddddd");
ts.add("zhushy");
ts.add("zhushangyuan");
// for-each遍历HashSet
// 假设set是TreeSet对象,并且set中元素是String类型
String[] arr = (String[]) ts.toArray(new String[0]);
for (String str : arr)
System.out.printf("for each : %s\n", str);
}
}
参考资料
- 详解java中的TreeSet集合 https://www.cnblogs.com/chichung/p/10252495.html
- Java中TreeSet的详细用法
https://blog.csdn.net/a1439775520/article/details/95373610 - https://www.cnblogs.com/skywang12345/p/3311268.html#a4 第4部分 TreeSet遍历方式
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)