`
XiangdongLee
  • 浏览: 91174 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

【Java集合之二】Set集合

    博客分类:
  • Java
阅读更多
本文围绕以下六个部分展开:

一、Set集合
二、HashSet类
三、LinkedHashSet类
四、TreeSet类
五、EnumSet类
六、各个Set实现类的性能分析






一、Set集合

        1. Set与Collection

        Set集合与Collection除了不允许包含重复元素外,其他都完全一样。它没有提供任何额外的方法。


        2. Set判断两个对象相同

        Set用equals方法(而不是==)来判断两个对象相同。

        只要两个对象用equals方法比较返回true,Set就不会接受这两个对象;只要用equals方法返回false,Set就会接受这两个对象(甚至这两个对象是同一个对象,Set也可把它们当成两个对象处理)。





二、HashSet类

        1. 概念

        它是Set接口的典型实现,大多数时候使用Set集合时就说使用这个实现类。

        HashSet按Hash算法来存储集合中的元素,因此具有良好的存取和查找性能。


        2. 特点

        (1)不能保证元素的排列顺序,顺序有可能发生变化。

        (2)HashSet不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步。

        (3)集合元素值可以是null。


        3. HashSet集合判断两个元素相等的标准

        两个对象通过equals方法比较相等,而且两个对象的hashCode()方法返回值也相等。


        4. 重写hashCode()方法的基本规则

        (1)在程序运行过程中,同一个对象多次调用hashCode()方法应该返回相同的值。

        (2)当两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法应返回相等的值。

        (3)对象中用作equals()方法比较标准的Field,都应该用来计算hashCode值。



三、LinkedHashSet类

        1. LinkedHashSet是HashSet的子类,因此:1)它依然不允许集合元素重复;2)它也是根据元素的hashCode值来决定元素的存储位置。

        2. LinkedHashSet同时使用链表维护元素的次序,因此,当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。

        它需要维护元素的插入顺序,因此性能略低于HashSet。但在遍历Set里的全部元素时将有很好的性能。



四、TreeSet类

        1. 概念

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


        2. 方法

        与HashSet集合相比,TreeSet由于集合元素有序,因此增加了访问第一个、前一个、后一个、最后一个元素的方法,并提供了三个截取子TreeSet的方法。


        3. TreeSet采用[b]红黑树的数据结构来存储集合元素。[/b]


        4. 排序方法:

        (1)自然排序。

        (2)定制排序。



五、EnumSet类

        它是专为枚举类设计的集合类。



六、各个Set实现类的性能分析

        1. HashSet与TreeSet

        HashSet性能总是比TreeSet好,因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的Set时,才应该使用TreeSet,否则都应该使用HashSet。

        2. HashSet与LinkedHashSet

        对于普通的插入、删除操作,HashSet比LinkedHashSet要快(因为LinkedHashSet维护链表会带来额外开销)。但遍历元素时,LinkedHashSet更好。

        3. EnumSet

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

        4. HashSet、TreeSet与EnumSet都是线程不安全的。

        如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,则必须手动保证该Set集合的同步性。

        通常可以通过Collections工具类的synchronizedSortedSet方法来“包装”该Set集合。此操作最好在创建时进行,以防止对Set集合的意外非同步访问。

SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));








整理时重点参考:《疯狂Java讲义》(第2版) 李刚 编著
  • 大小: 88.5 KB
1
2
分享到:
评论
1 楼 戢_时光 2015-09-07  

相关推荐

    java集合类详解(set list ArrayList等java集合类详述)

    Java 集合类详解 Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、...

    java集合知识-map、set等

    Set:元素不可以重复,是无序。p508 Set接口中的方法和Collection一致。 |--HashSet: 内部数据结构是哈希表 ,是不同步的。 如何保证该集合的元素唯一性呢? 是通过对象的hashCode和equals方法来完成对象唯一性的...

    java集合思维导图

    Java集合框架是Java编程语言中的一个核心部分,它为数据存储和管理提供了高效且灵活的解决方案。本思维导图及总结旨在深入理解并掌握Java集合的相关概念和使用方法。 首先,我们来了解一下Java集合框架的基本构成。...

    java 集合

    在Java集合框架中,`Collection`是所有单值集合的父接口,它包含了`List`、`Set`等子接口。而`Iterable`接口是集合可迭代的标志,通过`iterator()`方法获取迭代器,遍历集合中的元素。`Map`接口则是用于存储键值对的...

    java 集合练习题

    Java集合框架是Java API的一部分,它提供了多种数据结构,如List、Set和Queue等,以及操作这些数据结构的方法。这些数据结构可以帮助我们有效地存储和管理数据。 2. **ArrayList与HashMap**: - **ArrayList**:...

    Java集合排序及java集合类详解.pdf

    Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构允许程序员以高效的方式处理大量数据。 ##### 1.1 容器简介 容器是Java集合框架的基础概念,它们用于存储对象的集合。容器分为...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    java集合框架的使用。集合的运算

    3. 集合的交集:Java集合框架没有直接提供计算交集的方法,但我们可以借助Set的retainAll()方法。这个方法会保留当前集合中与指定集合共有的元素,从而得到交集: ```java Set<String> set1 = new HashSet(Arrays....

    Java集合排序及java集合类详解

    Java集合主要分为两大类:List(列表)和Set(集)。List是一个有序的集合,允许元素重复,并且可以保持插入时的顺序;而Set则不允许元素重复,它强调的是元素的唯一性。 1. List接口:List接口中最常见的实现类有...

    Java 集合排序及java 集合类详解

    Java 集合排序及java 集合类详解 Java 集合排序及java 集合类详解,Java...本教程详细解释了关于Java中的集合是如何实现的, 以及他们的实现原理等,涉及的部分内容:Collection , List ,Set , Map , 集合, 框架等。

    Java集合框架图

    Java集合List集合Set集合Map集合Collection和collections工具类的框架图

    Java集合排序及java集合类详解(Collection、List、Map、Set).doc

    Java集合排序及java集合类详解(Collection、List、Map、Set).doc

    Java集合框架总结

    #### 二、Java集合框架结构 Java集合框架的核心部分包括以下几类: - **集合接口**:主要包括`Collection`、`Set`、`List`和`Map`等接口。 - **抽象类**:提供了部分接口的默认实现,如`AbstractCollection`、`...

    java 集合部分笔记

    【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...

    JAVA IntSet 数列集合

    在Java编程语言中,`IntSet`是一种特殊的集合类,专用于存储整数。它类似于标准的`java.util.Set`接口,但只处理基本类型`int`,而非包装类`Integer`。`IntSet`的设计目标是提高性能,因为与对象相比,基本类型的...

    java集合知识大全

    ### Java集合知识大全 #### 一、集合概述 在Java编程语言中,集合是一组用于存储其他对象的对象。集合框架提供了多种数据结构,用于管理不同类型的数据。这些数据结构包括列表(List)、集(Set)、映射(Map)等,每种...

    java集合类list-set-map.doc

    java集合类list-set-map.doc

    Java集合Collection、List、Set、Map使用详解编程资料

    Java集合Collection、List、Set、Map使用详解

Global site tag (gtag.js) - Google Analytics