TreeSet的使用
下面是TreeSet的方法使用,代码实现如下:
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
//添加元素
set.add("小希");
set.add("小空");
set.add("小丽");
set.add("小光");
//获取元素个数
int size = set.size();
System.out.println("获取元素个数:" + size);//4
//将newSet1中所有的元素添加到set集合中
TreeSet<String> newSet1 = new TreeSet<>();
Collections.addAll(newSet1, "aaa","bbb","ccc","ccc");//利用集合工具类(Collections)批量添加数据
set.addAll(newSet1);
//清空集合
//set.clear();
System.out.println("判断集合中是否包含某个元素:" + set.contains("李白"));//true
System.out.println("判断集合中是否包含某个子集合:" + set.containsAll(newSet1));//true
//true表示没有元素,false表示有元素
System.out.println("判断集合中是否没有元素:" + set.isEmpty());//false
// set.remove("小空");//根据元素删除元素
// set.removeAll(newSet1);//去除交集
// set.retainAll(newSet1);//保留交集
//将集合转换为数组
Object[] array1 = set.toArray();
System.out.println(Arrays.toString(array1));
//将集合转换为指定类型的数组
String[] array2 = new String[set.size()];
set.toArray(array2);
System.out.println(Arrays.toString(array2));
System.out.println("--------------------");
//遍历集合 -- foreach
for (String element : set) {
System.out.println(element);
}
System.out.println("--------------------");
//遍历集合 -- Iterator
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){//判断是否有可迭代的元素
String next = iterator.next();//获取下一个元素
System.out.println(next);
}
TreeSet的特点
特点:自然排序
理解:TreeSet会根据元素的不同类型,去使用不同的排序规则
public static void main(String[] args) {
//TreeSet存储Integer的元素:数字升序
TreeSet<Integer> set1 = new TreeSet<>();
set1.add(4);
set1.add(2);
set1.add(1);
set1.add(5);
set1.add(3);
set1.add(3);
for (Integer element : set1) {
System.out.println(element);
}
System.out.println("------------");
//TreeSet存储String的元素:字典排序
TreeSet<String> set2 = new TreeSet<>();
set2.add("b");
set2.add("d");
set2.add("c");
set2.add("a");
set2.add("e");
set2.add("e");
for (String element : set2) {
System.out.println(element);
}
}
输出:
1
2
3
4
5
------------
a
b
c
d
e
外置比较器 - Comparator、内置比较器 - Comparable
比较器的优先级别:外置比较器 > 内置比较器
外置比较器 - Comparator
理解:利用一个静态内部类,添加条件来判断输出
TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {//利用一个静态内部类,添加条件来判断输出
//外置比较器的排序规则
//先比较两个学生是否相同,不相同就按照姓名长度排序,长度相同就按照年龄排序
@Override
public int compare(Student o1, Student o2) {
if(o1.equals(o2)){
return 0;
}
int nameLen1 = o1.getName().length();
int nameLen2 = o2.getName().length();
if(nameLen1 != nameLen2){
return nameLen1 - nameLen2;
}
int age1 = o1.getAge();
int age2 = o2.getAge();
if(age1 != age2){
return age1 - age2;
}
return 1;//返回一的时候无论如何都可以存到TreeSet里面去
}
});