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

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

Set 的使用

Set 与 Map 主要的不同有两点: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 来实现的,其使用 key 与 Object 的一个默认对象作为键值对插入到 Map 中的
  4. Set 最大的功能就是对集合中的元素进行去重
  5. 实现 Set 接口的常用类有 TreeSet 和 HashSet,还有一个 LinkedHashSet,LinkedHashSet是在 HashSet 的基础上维护了一个双向链表来记录元素的插入次序。
  6. Set 中的 Key 不能修改,如果要修改,先将原来的删除掉,然后再重新插入
  7. TreeSet 中不能插入 null 的 key,HashSet 可以
Set 底层结构 TreeSet HashSet
底层结构 红黑树 哈希桶
插入/删除/查找时间 复杂度 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是否有序不关心,需要更高的 时间性能


相关文章
|
存储 自然语言处理 安全
数据结构 - 7(Map和Set 15000字详解)
数据结构 - 7(Map和Set 15000字详解)
64281 16
|
存储 索引 容器
数据结构之Map/Set讲解+硬核源码剖析(二)
数据结构之Map/Set讲解+硬核源码剖析(二)
225 0
|
存储 C++ 容器
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
927 156
|
存储 编译器 容器
set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
521 0
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
438 6
【数据结构】map&set详解
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
387 1
|
存储 自然语言处理 安全
【数据结构】Map的使用与注意事项
【数据结构】Map的使用与注意事项
336 1
|
存储 C++ 容器
[数据结构]-map和set
[数据结构]-map和set