Java集合--Set

HashSet,TreeSet,LinkedHashSet


Set实现自Collection接口

特点:

  • Set中的元素不能重复
  • Set中的元素是无序的,取出和存入的顺序不同

如果要比较两个对象是否相等,要重写hashCode方法和equals方法,如果不重写,则两个对象哈希值相等时,才判断为相等。


HashSet,哈希表

  • HashSet基于HashMap实现,元素不能重复
  • HashSet允许有null值
  • HashSet是无序的,不会记录插入的顺序
  • HashSet是线程不安全的,即同一时刻可以有多个线程同时写

常用方法:

1.创建

Set<Integer> set = new HashSet<>();
HashSet<String> set2 = new HashSet<>();

2. 添加,add(e)

set2.add("police");

3. 判断元素是否存在,contains(e)

set2.contains("thief"); // boolean

4. 删除,remove(e)

set2.remove("police");

5. 清空,clear()

set.clear();

6. 计算大小,size()

set2.size();

7. 判空,isEmpty()

set.isEmpty();

8. 迭代,for-each

for(String str : set2){
    sout(str);
}

TreeSet

TreeSet是一个有序的集合,基于TreeMap实现,继承了Set接口,拥有Set的属性和方法。

  • TreeSet默认对元素按照升序排序,也可以在构造时传入Comparator来指定排序方法。
  • TreeSet存储对象时,该对象的类要实现Comparable接口,并重写compareTo()方法,否则无法实现对象元素的排序。
  • 重写compareTo()方法时,要返回相应的值,小于,等于,大于分别返回负整数,零,正整数。

常用方法:

1. 创建,四种构造方法

TreeSet<Integer> tre1 = new TreeSet<>(); // 默认,按升序排序
TreeSet<Integer> tre2 = new TreeSet<>(Collection c); // 包含集合
TreeSet<Integer> tre3 = new TreeSet<>(Comparator comparator); // 指定比较器
TreeSet<Integer> tre4 = new TreeSet<>(SortedSet set); // 包含set 

2. 添加,add(), addAll()

tre1.add(1);
tre1.addAll(c);

3. 判断元素是否存在,contains(e)

4. 判空,isEmpty()

5. 删除,remove()

6. 清空,clear()

7. 计算大小,size()

8. 克隆,clone()

9. 迭代,for-each

以上方法用法与HashSet相同,不再赘述。


TreeSet特有的方法

10. lower(e), floor(e), ceiling(e), higher(e)

tre1.lower(e); // 返回小于e的最大元素
tre1.floor(e); // 返回小于/等于e的最大元素
tre1.ceiling(e); // 返回大于/等于e的最小元素
tre1.higher(e); // 返回大于e的最小元素

11. first(), last(),pollFirst(), pollLast()

tre1.first();  // 返回第一个元素
tre1.last();  //  返回最后一个元素
tre1.pollFirst(); // 返回的同时删除
tre1.pollLast();  // 返回的同时删除

12. headSet(), tailSet(), subSet()

// 返回从头部到toElement的子Set,inclusive表示是否包含toElement,默认为false
tre1.headSet(E toElement, boolean inclusive);
// 返回从fromElement到尾部的子Set,inclusive表示是否包含fromElement,默认为false
tre1.tailSet(E fromElement, boolean inclusive);

// 返回从fromElement到toElement的子Set,inclusive分别表示是否包含起始Element,
// fromIclusive默认为true, toInclusive默认为false,含头不含尾
tre1.headSet(E fromElement, boolean fromInclusive,
             E toElement, boolean toInclusive);

LinkedHashSet

LinkedHashSet继承了HashSet,基于LinkedHashMap实现。

  • 所有的方法都和HashSet相同
  • 底层由LinkedHashMap实现,于是可以记录元素插入时的顺序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值