java学习第17天(TreeSet HashSet)

Set集合的特点(与ArrayList相比)
无序,唯一

主要学习它的两个子类

HashSet集合
A:底层数据结构是哈希表(是一个元素为链表的数组)
B:哈希表底层依赖两个方法:hashCode()和equals()
执行顺序:
首先比较哈希值是否相同
相同:继续执行equals()方法
返回true:元素重复了,不添加
返回false:直接把元素添加到集合
不同:就直接把元素添加到集合

如果想要自定义对象进行HashSet遍历,那么我们需要重写equals算法和HashCode方法。

TreeSet集合
A:底层数据结构是红黑树(是一个自平衡的二叉树)
B:保证元素的排序方式
a:自然排序(元素具备比较性)
让元素所属的类实现Comparable接口
b:比较器排序(集合具备比较性)
让集合构造方法接收Comparator的实现类对象

如果想要自定义对象进行TreeSet遍历,那么我们需要重写compareto方法。

时间: 2024-08-13 12:57:09

java学习第17天(TreeSet HashSet)的相关文章

Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例

概要 这一章,我们对TreeSet进行学习.我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet.内容包括:第1部分 TreeSet介绍第2部分 TreeSet数据结构第3部分 TreeSet源码解析(基于JDK1.6.0_45)第4部分 TreeSet遍历方式第5部分 TreeSet示例 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311268 第1部

Java学习心得17

编程题的感想 想法很好,现实很残酷.台上一分钟,台下十年功. GUI程序确实很恼人. 以点名器为例. 按照原计划,我是打算实在用户文本导入学生信息.四连抽和保存抽取结果(避免一个人抽多次)这三个功能.但是呢,在仔细考虑程序的算法时,我发现这几个功能实现起来,真不是一般的麻烦.麻烦的根源时学生信息,学生的学号可能与自己在班上的序号不同,就比如某人的学号尾号是23,但是他在点名册里是第18位,因为前面有5个人不在班上.这就尴尬了,因为我们平时习惯用学号,但是点名器采用的是序号.解决的方案就是采取特殊

Java学习(set接口、HashSet集合)

一.set接口 概念:set接口继承自Collection接口,与List接口不同的是,set接口所储存的元素是不重复的. 二.HashSet集合 概念:是set接口的实现类,由哈希表支持(实际上是一个HashMap集合).HashSet集合元素的提取顺序与存储顺序不相同. 采用哈希表数据结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法. 2.1哈希表 什么是哈希表? 链表与数组的组合. 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时

我的java学习笔记(17)关于内部类(part 2)

1.内部类是一种编译器现象,与虚拟机无关.编译器将会把内部类翻译成用$ 分隔外部类名与内部类的常规文件,而虚拟机则对此一无所知. 2.内部类拥有访问特权,所以与常规类比起来功能更加强大. 3.有时候一个类只在一个方法中使用一次,我们可以定义这个类为局部类. public void start() { class TimePrinter implements ActionListener { public void actionPerformed(ActionEvent event) { Date

Java学习笔记17

Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 我们来看看关于finalize()方法在源码中是如何定义的: protected void finalize() throws Throwable { } 关于此方法的说明: 当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源. finalize 的常规协定是:当 JavaTM 虚拟机已确定尚未终止的

Java基础第17天 TreeSet中的add()方法

在老师讲解 TreeSet 中通过比较器排序的原理后,我自己做了老师留下的练习.题目要求如下图的代码注释 出现的问题如上图的图片注释.自定义Student类,并重写了compareTo()方法.如下图: 意识到是重写compareTo()方法的缺陷,便做了如下改进 实现了练习的要求,如下图

Java集合详解7:HashSet,TreeSet与LinkedHashSet

Java集合详解7:HashSet,TreeSet与LinkedHashSet 今天我们来探索一下HashSet,TreeSet与LinkedHashSet的基本原理与源码实现,由于这三个set都是基于之前文章的三个map进行实现的,所以推荐大家先看一下前面有关map的文章,结合使用味道更佳. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.github.io/2018/05/12/colle

JAVA学习第三十六课(常用对象API)- 集合框架(四)— Set集合:HashSet集合演示

随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里很多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发常用 HashSet集合 .TreeSet集合 Set集合的元素是不重复且无序 一.HashSet集合 API文档解释:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null 元素. 此类为基本操作提供了稳定性能,注意,此实现不是同步的. 由上可

Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 上一篇总结了下ArrayList .LinkedList和Vector比较,今天泥瓦匠总结下Hash .LinkedList和Vector比较.其实大家都是Collection,只不过有点各自特性.那就是数据结构的不同表现. 一.Set回顾 一个不包括重复元素(包括可变对象)的Collection,是一种无序的集合.Set不包含满 a.equals(b) 的元素对a和b,并且最多有一个null.泥瓦