Set家族
public interface Set<E>extends Collection<E>
一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。
在所有构造方法以及 add、equals 和 hashCode 方法的协定上,Set 接口还加入了其他规定,这些规定超出了从 Collection 接口所继承的内容。出于方便考虑,它还包括了其他继承方法的声明(这些声明的规范已经专门针对 Set 接口进行了修改,但是没有包含任何其他的规定)。
对这些构造方法的其他规定是(不要奇怪),所有构造方法必须创建一个不包含重复元素的 set(正如上面所定义的)。
注:如果将可变对象用作 set 元素,那么必须极其小心。如果对象是 set 中某个元素,以一种影响 equals 比较的方式改变对象的值,那么 set 的行为就是不确定的。此项禁止的一个特殊情况是不允许某个 set 包含其自身作为元素。
某些 set 实现对其所包含的元素有所限制。例如,某些实现禁止 null元素,而某些则对其元素的类型所有限制。试图添加不合格的元素会抛出未经检查的异常,通常是 NullPointerException 或 ClassCastException。试图查询不合格的元素是否存在可能会抛出异常,也可能简单地返回 false;某些实现会采用前一种行为,而某些则采用后者。概括地说,试图对不合格元素执行操作时,如果完成该操作后不会导致在 set 中插入不合格的元素,则该操作可能抛出一个异常,也可能成功,这取决于实现的选择。此接口的规范中将这样的异常标记为“可选”。
public abstract class AbstractSet<E>extends AbstractCollection<E>implements Set<E>
此类提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。
通过扩展此类来实现一个 set 的过程与通过扩展 AbstractCollection 来实现 Collection 的过程是相同的,除了此类的子类中的所有方法和构造方法都必须服从 Set 接口所强加的额外限制(例如,add 方法必须不允许将一个对象的多个实例添加到一个 set 中)。
注意,此类并没有重写 AbstractCollection 类中的任何实现。它仅仅添加了 equals 和 hashCode 的实现。
public abstract class EnumSet<E extends Enum<E>>extends AbstractSet<E>implements Cloneable, Serializable
与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果其参数也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。
由 iterator 方法返回的迭代器按其自然顺序 遍历这些元素(该顺序是声明枚举常量的顺序)。返回的迭代器是弱一致的:它从不抛出 ConcurrentModificationException,也不一定显示在迭代进行时发生的任何 set 修改的效果。
不允许使用 null 元素。试图插入 null 元素将抛出 NullPointerException。但是,试图测试是否出现 null 元素或移除 null 元素将不会抛出异常。
像大多数 collection 实现一样,EnumSet 是不同步的。如果多个线程同时访问一个枚举 set,并且至少有一个线程修改该 set,则此枚举 set 在外部应该是同步的。这通常是通过对自然封装该枚举 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet(java.util.Set) 方法来“包装”该 set。最好在创建时完成这一操作,以防止意外的非同步访问:
Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能比其 HashSet 副本更快。如果其参数也是一个枚举 set ,则批量操作会在固定时间内执行。
public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, Serializable
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。
它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
此类为基本操作提供了稳定性能,
这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。对此 set 进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
注意,此实现不是同步的。如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。这通常是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来“包装” set。最好在创建时完成这一操作,以防止对该 set 进行意外的不同步访问:
Set s = Collections.synchronizedSet(new HashSet(...));此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果对 set 进行修改,除非通过迭代器自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来在某个不确定时间发生任意不确定行为的风险。
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器在尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误做法:迭代器的快速失败行为应该仅用于检测 bug。
public class TreeSet<E>extends AbstractSet<E>implements NavigableSet<E>, Cloneable, Serializable
基于 TreeMap 的 NavigableSet 实现。
使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
此实现为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。
注意,如果要正确实现 Set 接口,则 set 维护的顺序(无论是否提供了显式比较器)必须与 equals 一致。(关于与 equals 一致 的精确定义,请参阅 Comparable 或 Comparator。)这是因为 Set 接口是按照 equals 操作定义的,但 TreeSet 实例使用它的 compareTo(或 compare)方法对所有元素进行比较,因此从 set 的观点来看,此方法认为相等的两个元素就是相等的。
即使 set 的顺序与 equals 不一致,其行为也是 定义良好的;它只是违背了 Set 接口的常规协定。
注意,此实现不是同步的。如果多个线程同时访问一个 TreeSet,而其中至少一个线程修改了该 set,那么它必须 外部同步。这一般是通过对自然封装该 set 的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSortedSet 方法来“包装”该 set。此操作最好在创建时进行,以防止对 set 的意外非同步访问:
SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果从结构上对 set 进行修改,除非通过迭代器自身的 remove 方法,否则在其他任何时间以任何方式进行修改都将导致迭代器抛出 ConcurrentModificationException。因此,对于并发的修改,迭代器很快就完全失败,而不会冒着在将来不确定的时间发生不确定行为的风险。
注意,迭代器的快速失败行为无法得到保证,一般来说,存在不同步的并发修改时,不可能作出任何肯定的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测 bug。
- 大小: 2.8 KB
分享到:
相关推荐
其中,`setup_train_args()`设置训练参数,`set_random_seed()`确保可复现性,`create_logger()`创建日志记录器,`create_model()`构建模型实例。`preprocess_raw_data()`和`preprocess_mmi_raw_data()`分别处理原始...
通过短信与您的团队闲聊 从任何 Slack 频道向团队成员发送短信 用法 要通过短信在 Slack 上聊天,短信中的第一个字必须是您的 Slack 团队的目标频道 #general 你好团队!!! 要从 Slack 频道向团队成员发送 SMS,...
除此之外,课件还涵盖了动词短语,比如“took a breath”(深呼吸),“chew the fat”(闲聊),和“set foot on”(踏上)。动词短语是英语中的动态表达,它们能丰富我们的表达方式,使叙述更加生动。 综上所述,...
4. setback:名词,指的是挫折、失败。 5. restraint:名词,指的是约束、限制。 6. gossip:名词,指的是闲聊、八卦。 7. reward:名词,指的是报酬、奖励。 8. maintain:动词,指的是维持、保持。 9. define:...
19. set down:写下;放下 20. series:系列;连续 21. a series of:一系列的 22. Kitty:凯蒂(人名) 23. outdoors:在户外 24. spellbind:迷住;吸引 25. on purpose:故意地 26. in order to:为了 27. dusk:...
19. set down - 写下,记下 20. series - 系列,连续 21. a series of - 一系列的... 22. Kitty - 基蒂(人名) 23. outdoors - 在户外 24. spellbind - 使着迷,迷住 25. on purpose - 故意地 26. in order to - ...
- CRUD操作:`SET`, `GET`, `DEL`, `INCR`, `HSET`, `HGET`, `LPOP`, `SADD`, `ZRANGE`等。 - 持久化:`SAVE`, `BGSAVE`, `RDB`, `AOF`等。 - 事务:`MULTI`, `EXEC`, `DISCARD`。 - 发布/订阅:`PUBLISH`, `...
**寒暄与闲聊:** - “Have you attended this conference before? What sessions are you looking forward to?” - “What do you think about the keynote speech today?” **邀请参加非正式活动:** - “There’...
30. chew the fat / chewed up:这个短语比喻“闲聊,聊天”,用来描述朋友间的轻松谈话。 31. make a claim:意为“提出索赔或主张”,通常用于声明权利或要求。 32. now that:意为“既然”,用来引出因为某个...
在学习过程中,我们还会遇到"set down",意为记下或放下,"series"指的是连续或一系列的事物,如"a series of events"。"Kitty"是一个女性名字,"spellbind"意味着迷住或迷惑,"on purpose"表示故意地。"in order to...
Redis支持多种数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据类型提供了丰富的操作命令,如增删改查,以及对数据进行集合运算。Redis的数据持久化有...
19. set down:放下,记下,制定。 20. series:系列,一组连续的事物。 21. a series of:一系列的,一连串的。 22. Kitty:凯蒂,英文名字,通常用于女性。 23. outdoors:户外,室外,指在房子外面的地方。 24. ...
“set down”可用于记下或放下事物;“series”常与“a series of”一起使用,表示一系列或连续的事物;“Kitty”是一个女性名字,了解人名有助于阅读理解。 “outdoors”表示户外,与活动和旅行相关;“spellbind...
1. **Kubernetes基础知识**:K8s的核心概念包括Pod、Service、Deployment、ReplicaSet、ConfigMap、Secret等。Pod是K8s的基本运行单元,包含一个或多个紧密关联的容器;Service是容器的抽象,提供一种方法来访问Pod...
19. set down: 写下,记下,也可指放下或定居。 20. series: 系列,一组连续的事物或事件。 21. a series of: 一系列,一连串,常用来描述一系列的动作或事件。 22. Kitty: 凯蒂,人名,可能指女性名字。 23. ...
19. set down: 写下,记下,放置,用于记录或放置物体。 20. series: 系列,连续的一组事物。 21. a series of: 一系列,一连串,常用来描述连续发生的事物或事件。 剩余部分的单词和短语解析如下: 22. outdoors:...
16. set down - 写下,放下 17. series - 系列,连续 18. a series of - 一系列的 19. outdoors - 在户外 20. spellbind - 迷住,吸引 21. on purpose - 故意地 22. in order to - 为了 23. dusk - 黄昏,傍晚 24. ...
含义:闲聊 - n. 含义:闲话 - 例句:People tend to gossip about celebrities. 48. **fall in love** - 含义:爱上 - 例句:They fell in love at first sight. 49. **exactly** (adv.) - 含义:确切地;...
52. gossip(闲话,流言蜚语):非正式的、通常是关于他人的闲聊或传闻。 53. fall in love(恋爱):迅速且强烈地对某人产生浪漫的感情。 54. exactly(确切地,正是):强调完全符合或毫无偏差。 55. disagree(不...
19. **set down** - "写下;记下",用于记录或制定规则等。 20. **series** - "系列;连续",指一组相关或有顺序的事物。 21. **a series of** - "一系列,一连串",用于表示连续发生或相关的事件。 22. **Kitty** -...