Set
内部元素 无序的,不可重复元素的 collection
API:
boolean |
add(E e) 如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。 |
|
boolean |
addAll(Collection<? extends E> c) 如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。 |
|
void |
clear() 移除此 set 中的所有元素(可选操作)。 |
|
boolean |
contains(Object o) 如果 set 包含指定的元素,则返回 true。 |
|
boolean |
containsAll(Collection<?> c) 如果此 set 包含指定 collection 的所有元素,则返回 true。 |
|
boolean |
equals(Object o) 比较指定对象与此 set 的相等性。 |
|
int |
hashCode() 返回 set 的哈希码值。 |
|
boolean |
isEmpty() 如果 set 不包含元素,则返回 true。 |
|
Iterator<E> |
iterator() 返回在此 set 中的元素上进行迭代的迭代器。 |
|
boolean |
remove(Object o) 如果 set 中存在指定的元素,则将其移除(可选操作)。 |
|
boolean |
removeAll(Collection<?> c) 移除 set 中那些包含在指定 collection 中的元素(可选操作)。 |
|
boolean |
retainAll(Collection<?> c) 仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。 |
|
int |
size() 返回 set 中的元素数(其容量)。 |
|
Object[] |
toArray() 返回一个包含 set 中所有元素的数组。 |
|
|
|
Set 的选择:
不包含重复元素
单线程下:
仅需要不包含重复元素就用HashSet,
需要按添加时顺序遍历就用LinkedHashSet、
需要进行元素的大小排序就用TreeSet、
仅可以包含一个枚举类型的所有实例,就用EnumSet.
多线程下:
需要不包含重复元素且
需要进行key的大小排序就用ConcurrentSkipListSet
在读取操作远过多大于写入删除操作时就用CopyOnWriteArraySet
也可以使用Collections.synchronizedSet(Set<T>s)对任何一个非线程安全的Set进行包装而达到线程安全的目的,但迭代时必须同步迭代器,多线程频繁该问时,性能没有优势。
HashSet (内部由HashMap的 key 实现)
1 元素读取无顺序
2.允许添加一个null元素
3.插入删除速度快
4.重复的判断条件:equals及hashCode 都相等
5.非线程安全
6.创建Iterator后,对Set的修改,Iterator会报错:ConcurrentModificationException(Iterator.remove除外)
7.添加可变元素后,元素变化导至hashcode变化,将不能再定位到该元素
LinkedHashSet (内部由LinkedHashMap的KEY相关功能实现)
1.可按插入顺序读取
2.允许添加一个null元素
3.顺序读取速度快
4.重复的判断条件:equals及hashCode 都相等
5.非线程安全
6.创建Iterator后,对Set的修改,Iterator会报错:ConcurrentModificationException(Iterator.remove除外)
7.添加可变元素后,元素变化导至hashcode变化,将不能再定位到该元素
TreeSet(内部由TreeMap的KEY相关功能实现)
1.可按顺序读取。内部使用key实现的Comparable接口或 指定的Comparator接口 来进行比较再排序。
2.允许添加一个null元素
3..重复的判断条件: e.compareTo(Set里的元素)==0 或 Comparator.compare(e,Set里的元素)==0
4.非线程安全
5.创建Iterator后,对Set的修改,Iterator会报错:ConcurrentModificationException
TreeSet 实现了NavigableSet 接口:
E |
ceiling(E e) 返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null 。 |
Iterator<E> |
descendingIterator() 以降序返回在此 set 的元素上进行迭代的迭代器。 |
NavigableSet<E> |
descendingSet() 返回此 set 中所包含元素的逆序视图。 |
E |
floor(E e) 返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null 。 |
SortedSet<E> |
headSet(E toElement) 返回此 set 的部分视图,其元素严格小于 toElement。 |
NavigableSet<E> |
headSet(E toElement, boolean inclusive) 返回此 set 的部分视图,其元素小于(或等于,如果 inclusive 为 true)toElement 。 |
E |
higher(E e) 返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null 。 |
Iterator<E> |
iterator() 以升序返回在此 set 的元素上进行迭代的迭代器。 |
E |
lower(E e) 返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null 。 |
E |
pollFirst() 获取并移除第一个(最低)元素;如果此 set 为空,则返回 null 。 |
E |
pollLast() 获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null 。 |
NavigableSet<E> |
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 返回此 set 的部分视图,其元素范围从 fromElement 到 toElement 。 |
SortedSet<E> |
subSet(E fromElement, E toElement) 返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。 |
SortedSet<E> |
tailSet(E fromElement) 返回此 set 的部分视图,其元素大于等于 fromElement。 |
NavigableSet<E> |
tailSet(E fromElement, boolean inclusive) 返回此 set 的部分视图,其元素大于(或等于,如果 inclusive 为 true)fromElement 。 |
EnumSet (内部使用EnumMap)
只能保存枚举类型的Set,并且Set里的元素只能属于同一个枚举类型。
EnumSet是抽象类,不能实例化,它的子类实现了Set接口。
EnumSet提供了静态方法,选择合适的子类来实例化而生成Set对象:
static
|
allOf(Class<E> elementType) 创建一个包含指定元素类型的所有元素的枚举 set。 |
|
EnumSet<E> |
clone() 返回 set 的副本。 |
|
static
|
complementOf(EnumSet<E> s) 创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含指定 set 中所不 包含的此类型的所有元素。 |
|
static
|
copyOf(Collection<E> c) 创建一个从指定 collection 初始化的枚举 set。 |
|
static
|
copyOf(EnumSet<E> s) 创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含相同的元素(如果有的话)。 |
|
static
|
noneOf(Class<E> elementType) 创建一个具有指定元素类型的空枚举 set。 |
|
static
|
of(E e) 创建一个最初包含指定元素的枚举 set。 |
|
static
|
of(E first, E... rest) 创建一个最初包含指定元素的枚举 set。 |
|
static
|
of(E e1, E e2) 创建一个最初包含指定元素的枚举 set。 |
|
static
|
of(E e1, E e2, E e3) 创建一个最初包含指定元素的枚举 set。 |
|
static
|
of(E e1, E e2, E e3, E e4) 创建一个最初包含指定元素的枚举 set。 |
|
static
|
of(E e1, E e2, E e3, E e4, E e5) 创建一个最初包含指定元素的枚举 set。 |
|
static
|
range(E from, E to) 创建一个最初包含由两个指定端点所定义范围内的所有元素的枚举 set。 |
1.可按顺序读取。枚举实例的声明顺序
2.不允许添加null元素及其它枚举类型实例
3..重复的判断条件:e.ordinal() ==Set里的元素.ordinal()
4.非线程安全
ConcurrentSkipListSet:(内部由ConcurrentSkipListMap实现)
与TreeSet类似,多了线程安全特点。
1.可按顺序读取。内部使用 元素实现的Comparable接口或 指定的Comparator接口 来进行比较再排序。
2.不允许添加一个null元素
3..重复的判断条件: e.compareTo(Set里的元素)==0 或 Comparator.compare(e,Set里的元素)==0
4.线程安全的
CopyOnWriteArraySet:(内部使用CopyOnWriteArrayList实现)
1.可按插入顺序读取。
2.允许添加一个null元素
3..重复的判断条件:o1 == null ? o2 == null : o1.equals(o2)
4.线程安全的,内部使用数组保存元素,当写时 新建数据并赋给原数组引用,即丢弃原数组对象。
相关推荐
C语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言头文件 SETC语言...
"Set5"和"Set14"就是两个广泛使用的超分辨率数据集,主要用于测试和训练超分辨率算法。下面我们将深入探讨这两个数据集以及它们在超分辨率领域的应用。 首先,超分辨率是一种图像处理技术,它的目标是通过增加图像...
### Map和Set的异同分析 #### 一、概述 Map和Set作为C++ STL(Standard Template Library)中两种重要的关联容器,它们的设计理念和应用领域各有侧重,但两者之间存在着许多共性和区别。理解这两种容器的特点对于...
Level Set Methods(水平集方法)和Dynamic Implicit Surfaces(动态隐式曲面)是计算几何中的重要概念,广泛应用于图像处理、计算物理等领域。Level Set Methods由Stanley Osher和Ronald Fedkiw等人提出,并在Osher...
`set_dont_touch` 和 `set_size_only` 是 DC 中的两个关键命令,它们提供了这样的保护机制,但它们的作用方式有所不同。 首先,`set_dont_touch` 命令用于标记设计中的某些元素(如 cell、net、reference 或 design...
在C++编程中,`set`容器是STL(Standard Template Library,标准模板库)的一部分,它是一个关联容器,提供了唯一的、有序的元素存储。当我们需要对自定义类的对象进行排序时,`set`容器可以帮助我们实现这个需求。...
**set-UID实验报告** 在计算机系统中,特别是在Unix和类Unix系统如Ubuntu上,set-UID(Set-User-ID)是一种特殊的权限标志,用于控制程序执行时的权限。这个标志允许一个用户运行一个程序时,该程序可以暂时获得...
在VC++编程环境中,`SetProperty()`函数是一个用于设置对象属性的方法,常见于MFC(Microsoft Foundation Classes)库中。MFC是微软提供的一套C++类库,它封装了Windows API,使得开发者能更方便地进行Windows应用...
### C++ STL之set容器使用方法 #### 一、引言 在C++标准模板库(STL)中,`set`容器是一种非常重要的关联容器,主要用于存储唯一元素,并且这些元素会根据其键值自动排序。`set`内部通常采用红黑树(一种自平衡的二叉...
Set14数据集是计算机视觉领域的一个重要资源,主要用于研究和评估图像恢复、增强和超分辨率等技术。这个数据集由台湾中兴大学的计算机视觉研究团队在2014年发布,它针对的是那些需要小规模训练和测试神经网络的研究...
**Matlab中的Active-set算法详解** Active-set方法是一种在优化问题中解决凸二次规划(Quadratic Programming, QP)的有效算法。它主要应用于处理约束优化问题,尤其在那些包含线性不等式约束的情况下。在Matlab...
【LG Easy Set Package】是LG电子为用户提供的一个专门针对其显示器产品的设置工具包。这款软件主要用于帮助用户更轻松、快捷地对LG显示器进行个性化设置和优化,确保用户获得最佳的视觉体验。以下是对该软件及其...
它们之间的差异仅在于调用方式,Vue.set()直接引用set,而this.$set()是通过原型链将set绑定到Vue实例上。 **注意事项**: - **响应式属性的添加**:在Vue实例创建后,如果尝试直接给实例添加新的属性,例如`this....
在MySQL数据库中,`FIND_IN_SET()` 和 `IN` 是两种不同的查询方法,它们在处理数据集时有不同的特性和应用场景。本文将对这两种方法进行详细对比,以帮助理解它们之间的差异。 `FIND_IN_SET()` 函数主要用于在一个...
### SQL Server 中 SET IDENTITY_INSERT 的使用方法及注意事项 #### 标题与描述解析 在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)...
在C#中实现SNMP操作,主要包括GET和SET请求,这两个是SNMP协议的基础操作。 GET方法在SNMP中用于查询网络设备的状态或获取特定变量的值。GET请求通常由管理站(如你的C#应用程序)发起,然后由代理(网络设备)响应...
"setres适用小工具"是一款专为Windows PC用户设计的实用程序,主要用于调整计算机的屏幕分辨率。在日常使用中,我们可能需要更改分辨率以适应不同的显示设备或优化视觉体验。这款小工具以其简单易用、功能高效而备受...
在本文中,我们将深入探讨“修改分辨率的工具SETRES”,以及如何使用这个工具来调整计算机的显示设置。 SETRES是一个小巧实用的命令行工具,专门用于更改Windows操作系统的桌面分辨率。在没有图形化用户界面的情况...
在本场景中,我们关注的是一个特定的集合类型——`IntSet`,它专门用于存储整型数值。`IntSet`通常以高效、无序且不允许重复的方式来组织数据。在本文中,我们将深入探讨`IntSet`的定义、实现和测试,以及如何在实际...
标题:TMS320C54x_DSP_Reference_Set_Volume_3_Algebraic_Instruction_Set 描述与标签中提及的“TMS320C54x_DSP_Reference_Set_Volume_3_Algebraic_Instruction_Set.pdf”是德州仪器(Texas Instruments)针对其TMS...