Java集合类学习笔记(Set集合)

Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。

HashSet类的特点:

  • 不能保证元素的排列顺序,顺序可能与添加顺序不同,也有可能发生变化。
  • HashSet不是同步的,如果多个线程同时访问并修改一个HashSet时,必须保证其同步。
  • 元素值可以是null。

LinkedHashSet类的特点:

是HashSet类的子类,它根据元素的hashCode值来决定元素的存储位置,但同时使用链表维护元素的次序。

TreeSet类的特点:

是SortedSet接口的实现类,可以确保集合元素处于排序状态。

EnumSet类的特点:

是一个专为枚举类设计的集合类,其中的所有元素都必须是指定枚举类型的枚举值。

集合元素是有序的,以枚举值在Enum类内的定义顺序来决定集合元素的顺序。

不允许插入null元素,否则会抛出NullPointerException。

各Set实现类的性能分析:

HashSet的性能总是比TreeSet好(特别是最常用的添加、查询元素等操作)。

LinkedHashSet比HashSet要略微慢一点,这是由于维护链表所带来的额外开销造成的。

EnumSet是所有Set实现类中性能最好的,但它只能保存同一个枚举类的枚举值作为集合元素

Set的三个实现类HashSet、TreeSet、EnumSet都不是线程安全的,可以通过Collections工具类的synchronizedSortedSet方法来“包装”该Set集合。此操作最好在创建时进行,以防对Set集合的意外非同步访问。

时间: 2024-10-12 19:25:14

Java集合类学习笔记(Set集合)的相关文章

黑马程序员--Java基础学习笔记【集合-Map】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Map 接口 Map 接口定义的集合,又称查找表 Map 接口和 Collection 接口没关系 Map 集合派系,存储映射键值对 不允许重复的键,每个键最多映射 1 个值 根据内部数据结构不同,Map 接口有多种实现类: 常用的有内部为 hash 表实现的 HashMap 和内部为排序二叉树实现的 TreeMap Map 接口和 Collection 接口的不同 Map 和 Collect

Java集合类学习笔记(Map集合)

Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是Map接口的典型实现类,他们的关系类似于ArrayList和Vector的关系. HashMap和Hashtable的区别: Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现. Hashtable不允许使用null作为key和value,HashMap可以使用. Li

Java集合类学习笔记(List集合)

List集合是指一个元素有序.可重复的集合,集合中每个元素都有其对应的顺序索引. ArrayList和Vector作为List集合的两个典型实现,完全支持List接口的全部功能,并且在用法上几乎完全相同. ArrayList和Vector的显著区别是: ArrayList不是线程安全的,Vector是线程安全的.

Java基础学习笔记十七 集合框架(三)之Map

Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储. Map中的集合,元素是成对存在的(理解为夫妻).每个元素由键与值两部分组成,通过键可以找对所对应的值. Collection中的集合称为单列集合,Map中的集合称为双列集合. 需要注意的是,Map中的集合不能包含重复的键,值可以重复:每个键只能对应一个值. Map中

黑马程序员--Java基础学习笔记【集合-Set】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Set 接口特点: 不允许存储重复元素,无序集合:存储取出没有顺序(不保证迭代顺序),没有索引 Set接口方法,和父接口Collection抽象方法完全一样 Set接口存储对象并迭代,找实现类HashSet集合 HashSet 如何保证元素唯一? Set里的元素是不能重复的,使用 equals() 方法和 hashCode() 方法来区分重复与否.覆盖 equals() 方法.hashCode

Java集合类学习笔记

前言:下载Java的API,需要使用接口时,可在API中进行查询. 1.collection接口:可理解为一个动态的对象数组,不同的是集合中对象的内容可以任意扩充. 特点:性能高:易扩展和修改. 常用子类接口:List.Set.Queue. 2.List接口有ArrayList.vector子类,两者的使用方法相同,不同的是ArrayList是异步处理方式,性能高,但是非线程安全:vector同步处理方式,性能低,但是线程安全.在不要求线程安全的时候采用ArrayList子类. 使用实例: pa

Java集合类学习笔记(各种Map实现类的性能分析)

HashMap和Hashtable的实现机制几乎一样,但由于Hashtable是一个古老的.线程安全的集合,因此HashMap通常比Hashtable要快. TreeMap比HashMap和Hashtable要慢(尤其在插入.删除key-value对时更慢),TreeMap中的key-value总是处于有序状态,无需专门进行排序操作. LinkedHashMap比HashMap慢一点,因为它需要维护链表来保持Map中key-value时的添加顺序. IdentityHashMap采用与HashM

Java集合类学习笔记(各种线性表性能分析)

ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好: 而内部以链表作为底层实现的集合在执行插入.删除操作时有较好的性能. 总体来说,ArrayList的性能比LinkedList性能要好,因此大部分时候都应该考虑ArrayList. 关于使用List集合有如下建议: 如果需要遍历List集合元素,对于ArrayLi

java集合类学习笔记之LinkList

1.简述 LinkList的底层其实就是一个双向链表,所谓的链表就是一个LinkList内部静态静态类(Node),对LinkList的所有操作本质上就是通过对LinkList中新建的Node对象 进行关联引用 2.实现 a.构造方法: LinkList一共提供了两种构造方法: /** * Constructs an empty list. */ public LinkedList() { } /** * Constructs a list containing the elements of