【数据结构】Set的使用与注意事项

Set 的使用

SetMap 主要的不同有两点:Set 是继承自 Collection 的接口类,Set 中只存储了 Key

方法解释
boolean add(E e)添加元素,但重复元素不会被添加成功
void clear()清空集合
boolean contains(Object o)判断 o 是否在集合中
Iterator iterator()返回迭代器
boolean remove(Object o)删除集合中的 o
int size()返回set中元素的个数
boolean isEmpty()检测set是否为空,空返回true,否则返回false
Object[] toArray()将set中的元素转换为数组返回
boolean containsAll(Collection c)集合c中的元素是否在set中全部存在,是返回true,否则返回

false
boolean addAll(Collection c)将集合c中的元素添加到set中,可以达到去重的效果

add()

Set<String> set = new TreeSet<>();  
set.add("abc");  
set.add("hello");  
set.add("abc");  
System.out.println(set);

/*
[abc, hello]
*/
  • 可发现,set 中不能存储相同的元素

iterator()

通过迭代器返回集合

Set<String> set = new TreeSet<>();  
set.add("abc");  
set.add("hello");  
set.add("abc");  
  
Iterator<String> it =  set.iterator();  
while (it.hasNext()){  
    System.out.println(it.next());  
}

/*
abc
hello
*/
  • while 判断 it 是否还有下一个,有的话就打印,打印完后就到下一个

注意事项

  1. Set 是继承自 Collection 的一个接口类

  2. Set 中只存储了 key,并且要求 key 一定要唯一

  3. TreeSet 的底层是使用 Map 来实现的,其使用 keyObject 的一个默认对象作为键值对插入到 Map 中的

  4. Set 最大的功能就是对集合中的元素进行去重

  5. 实现 Set 接口的常用类有 TreeSetHashSet,还有一个 LinkedHashSetLinkedHashSet是在 HashSet 的基础上维护了一个双向链表来记录元素的插入次序。

  6. Set 中的 Key 不能修改,如果要修改,先将原来的删除掉,然后再重新插入

  7. TreeSet 中不能插入 nullkeyHashSet 可以

Set 底层结构TreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间 复杂度 O ( l o g N ) O(logN) O(logN) O ( 1 ) O(1) O(1)
是否有序关于Key有序不一定有序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入和删除1. 先计算key哈希地址 2. 然后进行 插入和删除
比较与覆写key必须能够比较,否则会抛出

ClassCastException异常
自定义类型需要覆写equals和

hashCode方法
应用场景需要Key有序场景下Key是否有序不关心,需要更高的 时间性能
  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值