1.4.9 Java数据结构章 Set

Set特性

  1. Set是继承自Collection的一个接口类
  1. Set中只存储了key,并且要求key一定要唯一
    3.TreeSet的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
  2. Set最大的功能就是对集合中的元素进行去重
  3. 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础 上维护了一个双向链表来记录元素的插入次序。
  4. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
  5. TreeSet中不能插入null的key,HashSet可以。
    8.Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。

添加

//添加元素,但重复元素不会被添加成功

boolean add(E e);

清空

//清空集合

oid clear();

判断key是否存在

boolean contains(Object o);

返回迭代器

//迭代器也是个对象,且是set的内部类,可以用这个内部类实现迭代的效果

Iterator iterator() 

集合中删除key

boolean remove(Object o);

返回元素个数

//返回set中元素的个数

int size();

判断集合是否为空

//检测set是否为空,空返回true,否则返回false

boolean isEmpty();

set转数组

//将set中的元素转换为数组返回

Object[] toArray();

判断一个集合中元素是否都在集合中

//集合c中的元素是否在set中全部存在,是返回true,否则返回 false

boolean containsAll(Collection c);

往其他集合添加另一个集合

//将集合c中的元素添加到set中,可以达到去重的效果

boolean addAll(Collection c);

Set的迭代

不管是HashSet还是TreeSet的遍历都是有序的,set的迭代器继承Iterator类

迭代器遍历

Set<String> s = new TreeSet<>();

Iterator<String> it = s.iterator();
while (it.hasNext()) {
    System.out.print(it.next() + " ");
}

范围for遍历

for(String e: s){
    System.out.print( e + " ");
}
  1. 在使用迭代器的过程中,it.hasNext()方法不涉及指针的移动,只是判断当前指针是否超出下标,也就是判断是否还有下一元素。

  2. 而it.next()方法从源码来看则是先将指针下移并且取得当前元素。整个过程中只有next()方法涉及指针的下移.

  3. it.next本质是先获取当前元素,在移动指针到下一个元素

TreeSet和HashMap的区别

Set底层结构TreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间 复杂度O(log2N)O(1)
是否有序关于Key有序不一定有序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入和删除先计算key哈希地址 2. 然后进行 插入和删除
比较与覆写key必须能够比较,否则会抛出 ClassCastException异常自定义类型需要覆写equals和 hashCode方法
应用场景需要Key有序场景下Key是否有序不关心,需要更高的 时间性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Ap0stoL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值