0
点赞
收藏
分享

微信扫一扫

【Java】Set集合之TreeSet

九月的栩 2022-03-12 阅读 203

 风 华 是 一 指 流 砂 , 苍 老 是 一 段 年 华

目录

一、概述

二、常用方法

1.定义一个HashSet类型的集合

2.添加数据:add()和addAll()

3.删除数据:remove()

4.清空集合:clear()

5.判断是否包含某元素:contains()

6.判断集合是否为空:isEmpty()

7.集合长度:size()

8.遍历集合

8.1 迭代器遍历

8.2 迭代器遍历并逆序输出

8.3 for each遍历

9. 获取集合中第一个元素:first()

10.获取集合中最后一个元素:last()

11.比较:floor()、lower()、ceiling()、higher() 

12.复制集合:clone()

13.返回该集合指定区间的值

13.1 subSet()

13.2 headSet()

13.3 tailSet()

14. 自定义排序Comparator


一、概述

TreeSet是SortedSet接口的实现类,TreeSet可以保证集合元素处于排序状态;TreeSet支持两种排序方法:自然排序和定制排序,一般情况默认为自然排序;

排序时TreeSet会调用集合元素的compare(Object obj)方法比较元素之间的大小关系,然后将集合元素升序排列;

一个TreeSet内必须放入相同类的对象(即同一类型数据),否则将无法进行排序并且会报错,对此我们可以利用泛型来进行约束限制。

二、常用方法

1.定义一个HashSet类型的集合

//方法1
Set<Integer> set = new TreeSet<Integer>();
//方法2
TreeSet<Integer> ts = new TreeSet<Integer>();

Object位置为集合数据类型,称之为泛型,例如,如果集合中数据全部为整型数据,则泛型为Integer,如果集合中数据全部为字符串类型数据,则泛型为String,如果不确定集合中数据类型则可以将泛型定义为Object,这样就可以输入任意类型的数据。

2.添加数据:add()和addAll()

add()和addAll()两种方法都是向集合中添加数据,其中add()是向集合中添加单个数据,addAll()是向集合中添加另一个集合。

TreeSet<Integer> ts = new TreeSet<Integer>();
ts.add(1);
ts.add(4);
ts.add(3);
ts.add(5);
ts.add(2);
System.out.println(ts);//自然排序
ts.add(2);//不可重复
System.out.println(ts);

TreeSet<Integer> ts = new TreeSet<Integer>();
ts.add(1);
ts.add(4);
ts.add(3);
ts.add(5);
ts.add(2);
System.out.println(ts);//自然排序

TreeSet<Integer> ts1 = new TreeSet<Integer>();
ts1.add(3);
ts1.add(4);
ts1.add(7);
ts1.add(9);
ts1.add(6);
System.out.println(ts1);//自然排序

ts.addAll(ts1);
System.out.println(ts);

3.删除数据:remove()

//移除
ts.remove(3);
System.out.println(ts);

 

4.清空集合:clear()

//清空集合
ts.clear();
System.out.println(ts);

 

5.判断是否包含某元素:contains()

//判断是否包含某元素
System.out.println(ts.contains(2));

  

6.判断集合是否为空:isEmpty()

//判断集合是否为空
System.out.println(ts.isEmpty());

  

7.集合长度:size()

//集合元素个数
System.out.println(ts.size());

  

8.遍历集合

8.1 迭代器遍历

//迭代器遍历
Iterator<Integer> it = ts.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}

  

8.2 迭代器遍历并逆序输出

//遍历逆序输出
Iterator<Integer> tset = ts.descendingIterator();
while(tset.hasNext()) {
System.out.println(tset.next());
}

  

8.3 for each遍历

//for each遍历
for(Integer obj : ts) {
System.out.println(obj);
}

 

9. 获取集合中第一个元素:first()

//第一个元素
System.out.println(ts.first());

10.获取集合中最后一个元素:last()

//最后一个元素
System.out.println(ts.last());

 

11.比较:floor()、lower()、ceiling()、higher() 

//返回集合中小于等于给定值的最大值
System.out.println(ts.floor(3));
//返回集合中小于给定值的最大值
System.out.println(ts.lower(3));

//返回集合中大于等于给定值的最小值
System.out.println(ts.ceiling(3));
//返回集合中大于给定值的最小值
System.out.println(ts.higher(3));

12.复制集合:clone()

//复制集合
Object ss = ts.clone();
System.out.println(ss);

 

13.返回该集合指定区间的值

13.1 subSet()

//给定两个元素,返回这两个元素之间的所有值(前闭后开区间)
System.out.println(ts.subSet(1, 3));
//给定两个元素,返回这两个元素之间的所有值,true表示包含该值,false表示不包含该值
System.out.println(ts.subSet(1, true, 5, false));

13.2 headSet()

//返回给定元素之前的所有值,但不包含该元素
System.out.println(ts.headSet(3));
//返回给定元素之前的所有值,true表示包含该元素,false表示不包含该元素
System.out.println(ts.headSet(3, true));

 

13.3 tailSet()

//返回给定元素之后的所有值且包含该元素
System.out.println(ts.tailSet(4));
//返回给定元素之后的所有值,true表示包含该元素,false表示不包含该元素
System.out.println(ts.tailSet(4, false));

 

14. 自定义排序Comparator

public class lx {	
public static void main(String args[]) {
Set<person> set = new TreeSet<person>(new person());
person p1 = new person("Tom",10);
person p2 = new person("李四",2);
person p3 = new person("Lucy",30);

set.add(p1);
set.add(p2);
set.add(p3);
for(person p : set) {
System.out.println(p.name+":"+p.age);
}
}
}

class person implements Comparator<person>{
int age;
String name;

public person() {

}
public person(String name,int age) {
this.name = name;
this.age = age;
}

@Override
public int compare(person o1, person o2) {
if(o1.age > o2.age) {
return 1;
}else if(o1.age < o2.age) {
return -1;
}else {
return 0;
}
}
}

举报

相关推荐

0 条评论