一大波Java来袭(七)——Java集合之Set接口

本文主要讲Collection接口之一Set接口及其实现类。

Set集合,特点:无序,不可重复

上文中我们介绍,Set集合类似于一个罐子,被丢进去的元素是没有明显顺序的。仔细想来,应该不会是随机存储的吧?其存储方式必定有一定的规律,且听我慢慢道来。

Set接口的实现类,如图所示:

  1. HashSet类

    1. 字面上猜测,跟hash算法有关
    2. 子类LinkedHashSet,在其基础上添加了Linked链接,可能是按照指针穿起来
  2. SortedSet接口
    1. 字面猜测,已经排序,只是不知道是按照何种方式进行排序的
    2. TreeSet类,默认是根据树形结构存储?
  3. EnumSet类
    1. 与枚举类型有关?

让我们带着问题,去寻找答案吧!

一、HashSet

1. 特点:按照Hash算法来存储集合中的元素,具有很好的存取和查找性质。

2. 如何判断重复?确定存储位置?

若添加新元素,首先判断equals

若false,则添加成功。

若返回true,则根据Hash算法判断hashCode()

若相同,则添加失败。

若不相同,则添加成功。存储位置:根据HashCode的值确定

3. 子类LinkedHashSet,特点:同时维护元素的插入顺序,性能低于HashSet

二、TreeSet,实现SortedSet接口,有序(根据元素实际值排序,而非插入顺序)

1. 对比

HashSet类,采用hash算法决定存储位置

TreeSet采用红黑树的数据结构对元素排序

2. 2种排序方法

自然排序(默认) :调用Comparable接口的compareTo(Ojebct  o)方法,升序排列,根据红黑树算法确定存储位置

定制排序 :调用Comparator接口的int compare(T  o1, T  o2)方法

三、EnumSet,以枚举值在Enum类内的定义顺序来确定集合元素中的顺序

1. 存储方式:位向量。结构紧凑,高效,占用内存小。

四、性能比较

1. HashSet性能总是比TreeSet好,特别是常用的添加、查找操作。

因此TreeSet中需要额外的红黑树算法来维护集合元素的次序。

只有当需要一个保持排序的Set时,才使用TreeSet。否则都是用HashSet

2.LinkedHashSet是HashSet的子类,因为有了链表,所以在遍历时会更快。而由于维护链表所带来的额外开销,使得对于普通插入、删除,操作性能稍慢。

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

          

注意:Set的三个实现类:HashSet、TreeSet、EnumSet都是线程不安全的,需要手动保证Set集合的同步性。通常使用Collections工具类的synchronizedSortedSet方法来“包装”该Set集合。此操作最好是在创建时进行,防止对Set集合的意外非同步访问。

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

时间: 2024-08-05 22:22:48

一大波Java来袭(七)——Java集合之Set接口的相关文章

一大波资源来袭:工具,源码,职场攻略

又要一年了,不要再做个傻傻的程序员,然后不停的问:为什么技术好.工作认真却还败给那些不如自己的人,觉得很是不公平, No No No,你还修炼的不够,不过听Dev的刘说移动应用开发者要涨工资啦,有木有很幸福的赶脚,还有人说由于科技人才短缺,美国放松了留美毕业生工作政策,但也有其它报道称美国技术类绿卡申请越来越难,奥巴马新宣布的移民新政也不利于留学生的发展,这到底是怎么回事呢?难道在美国的留学生会回来抢国内旭元的饭碗,还是去看看是不是真得吧. 对了,刚才说到修炼不够,我是来送福利的,给你的一大波资

java(七)集合

集合类 为什么会出现集合类?. 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作, 就对对象进行存储,集合就是存储对象最常用一种方式. 数组和集合类同时容器,有何不同? 数组虽然可以存储对象,但长度是固定的.集合长度是可变的. 数组中可以存储基本类型数据,集合只能存储对象. 集合特点: 1.集合只用于存储对象 2.集合长度可变 3.集合可以存储不同类型的对象,但不能存储基本类型数据. 集合容器因为内部数据结构不同,有多种具体容器.不断向上抽取,就形成了集合框架. 框架的顶层

一大波字符来袭!

节目预告: 字符的各种,操作,数据类型新讲 一预热: 重要的事情再重复: int(整数) bool(布尔判断) str(字符串) 新增 : list(列表) :大量的数据凑一块 ,","分隔 ,外套 "[ ] " tuple (元组) :   数据凑一块形成的整体,不能发生变化 , ","分隔 ,外套 "( ) " dict (字典) :  有序的数据凑一块 ,包括key(索引)和value(key对应的数据) , "

一大波Java来袭(五)——Java集合概述

把"Java集合"比作是容器,可以把多个对象(实际:是对象的引用),扔在容器中. JDK1.5之前,被丢进集合中的对象,会丢失起数据类型.默认为Object类型 JDK1.5之后,不会丢失数据类型,因为引入了"泛型"(作为下文重点) 本文将结合数据结构,重点讲述Java的4种集合体系的功能和用法,并给出不同应用场景改如何选择? 一.同样是用于"存储数据",既可以使用"数组",有可以使用"集合",有什么区别吗

一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对比

本文主要介绍String类.StringBuffer类.StringBuilder类的区别  : 一.概述 (一)String 字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象. (二)StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同. 区别在于StringBuffer每个方法中前面添加了"synchronized",保证其是线程安全的. (三)StringBuilder 字符串可变量,

一大波Java来袭(二)异常处理

概要解析: 本章的知识点可以记为:1图+5关键字+先逮小的.后逮大的  一.基础 (一)定义 1.异常 是指在程序运行的时候发生的一些异常事件.良好的程序设计应该在异常发生的时候提供处理异常的方法,使得程序不会因为异常的发生而中断.因此Java提供的用于处理程序中错误的一种机制. 2.抛出异常throw java程序的执行过程中如出现异常事件,可以生成一个异常类对象(封装了异常事件的信息),被提交给java运行时系统. 简单理解为:推卸责任.马路上遇到了交通事故,不需要自己处理,而是拨打110,

一大波Java来袭(三)Java常用类

本文简单介绍集中Java常用类 不同种类的工具用于处理不同的工作.比如:厨房中的工具用于烹饪:农场中的工具用于养殖--对于Java的学习中处理不同的工作也要采用不同的工具.如:处理数学函数问题用Math类.针对文件的操作采用File类--这也充分体现了Java面向对象的特点 一.字符串类(重点理解内存模型) (一)String Java.lang.String字符串常量,具有不可变性. (二)StringBuffer Java.lang.StringBuffer字符串可变量,是线程安全的. (三

大波Java来袭(一)JDK安装与环境变量的配置

一.基础知识 (一)什么是Java? Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称. (二)什么是JDK?   学习Java编程时,首先要做的就是搭建开发环境.就像师傅在修车之前,需要搭建一个修车厂,准备好修车所需要的环境和工具一样.这里呢?!Java的开发环境就是JDK,是Java Development Kit的缩写,意思是

七:Java之封装、抽象、多态和继承

本文章介绍了关于Java中的面向对象封装.抽象.继承.多态特点 Java面向对象主要有四大特性:封装.抽象.继承和多态. 一.封装 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员. 在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属性,同时也具有eat(),sle

Java 异常处理机制和集合框架

课程  Java面向对象程序设计   实验名称  异常处理机制.集合框架 班级    13级计三          学号  10503                姓名 一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:try.catch.finally.throw.throws,请理解每个关键字的作用,并在编写程序,使用运用这5个关键字,观察效果