Java中的HashSet和TreeSet

1:Set集合(理解)
	(1)Set集合的特点
		无序,唯一
	(2)HashSet集合(掌握)
		A:底层数据结构是哈希表(是一个元素为链表的数组)
		B:哈希表底层依赖两个方法:hashCode()和equals()
		  执行顺序:
			首先比较哈希值是否相同
				相同:继续执行equals()方法
					返回true:元素重复了,不添加
					返回false:直接把元素添加到集合
				不同:就直接把元素添加到集合
		C:如何保证元素唯一性的呢?
			由hashCode()和equals()保证的
		D:开发的时候,代码非常的简单,自动生成即可。
		E:HashSet存储字符串并遍历
		F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)
	(3)TreeSet集合
		A:底层数据结构是红黑树(是一个自平衡的二叉树)
		B:保证元素的排序方式
			a:自然排序(这种排序方式可以理解成元素本身具备比较性)
				让元素所属的类实现Comparable接口
			b:比较器排序(这种排序可以理解成集合类具备比较性)
				让集合构造方法接收Comparator的实现类对象,实现方式可以用匿名类来实现。
		C:把我们讲过的代码看一遍即可
	(4)案例:
		A:获取无重复的随机数
		B:键盘录入学生按照总分从高到底输出

2:Collection集合总结(掌握)
	Collection
		|--List	有序,可重复
			|--ArrayList
				底层数据结构是数组,查询快,增删慢。
				线程不安全,效率高
			|--Vector
				底层数据结构是数组,查询快,增删慢。
				线程安全,效率低
			|--LinkedList
				底层数据结构是链表,查询慢,增删快。
				线程不安全,效率高
		|--Set	无序,唯一
			|--HashSet
				底层数据结构是哈希表。
				如何保证元素唯一性的呢?
					依赖两个方法:hashCode()和equals()
					开发中自动生成这两个方法即可
				|--LinkedHashSet
					底层数据结构是链表和哈希表
					由链表保证元素有序
					由哈希表保证元素唯一
			|--TreeSet
				底层数据结构是红黑树。
				如何保证元素排序的呢?
					自然排序
					比较器排序
				如何保证元素唯一性的呢?
					根据比较的返回值是否是0来决定

3:针对Collection集合我们到底使用谁呢?(掌握)
	唯一吗?
		是:Set
			排序吗?
				是:TreeSet
				否:HashSet
		如果你知道是Set,但是不知道是哪个Set,就用HashSet。

		否:List
			要安全吗?
				是:Vector
				否:ArrayList或者LinkedList
					查询多:ArrayList
					增删多:LinkedList
		如果你知道是List,但是不知道是哪个List,就用ArrayList。

	如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

	如果你知道用集合,就用ArrayList。

4:在集合中常见的数据结构(掌握)
	ArrayXxx:底层数据结构是数组,查询快,增删慢
	LinkedXxx:底层数据结构是链表,查询慢,增删快
	HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
	TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

  

时间: 2025-01-08 02:29:20

Java中的HashSet和TreeSet的相关文章

java数据结构之HashSet和TreeSet

一.HashSet源码注释 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { static final long serialVersionUID = -5024744406713321676L; //HashSet底层是HashMap private transient HashMap<E,Object> m

30、Java中Set集合之HashSet、TreeSet和EnumSet

Set集合是Collection的子集,Set集合与Collection基本相同,没有提供任何额外的方法,只是Set不允许包含重复的元素. Set集合3个实现类:HashSet.TreeSet.EnumSet 一.HashSet public class HashSet<E>extends AbstractSet<E>implements Set<E>, Cloneable, java.io.Serializable HashSet是Set接口的典型实现,HashSet

java中treemap和treeset实现(红黑树)

TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点. TreeSet 和 TreeMap 的关系 为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializab

java中的HashTable,HashMap和HashSet

目录(?)[+] 上篇博客中我们详细的分析了java集合<java中Map,List与Set的区别>. 同时我们也对HashSet和HashMap的核心方法hashcode进行了详解,见<探索equals()和hashCode()方法>. 万事俱备,那么下面我们就对基于hash算法的三个集合HashTable,HashSet和HashMap详解. 本文目录: 1. HashTable和HashMap的区别 2. HashSet和HashMap的区别 3. HashMap,HashS

JavaSE入门学习36:Java集合框架之Set接口及其实现类HashSet和TreeSet

一Set接口 Set接口可以与数学中的集合的概念相对应.Set接口是Collection接口的子接口,Set接口里多个对象之间没有明 显的顺序.具体详细方法请参考API文档(可见身边随时带上API文档有多重要),基本与Collection接口中定义的方法相 同.只是行为不同(Set不允许包含重复元素). Set集合不允许重复元素,是因为Set判断两个对象相同不是使用==运算符,而是根据equals()方法.即两个对象 用equals()方法比较返回true,Set就不能接受两个相等的对象. 我们

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

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

(转载)Java 容器 &amp; 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较

上一篇总结了下ArrayList .LinkedList和Vector比较,今天泥瓦匠总结下Hash .LinkedList和Vector比较.其实大家都是Collection,只不过有点各自特性.那就是数据结构的不同表现. 一.Set回顾 一个不包括重复元素(包括可变对象)的Collection,是一种无序的集合.Set不包含满 a.equals(b) 的元素对a和b,并且最多有一个null.泥瓦匠的记忆宫殿:1.不允许包含相同元素 2.判断对象是否相同,根据equals方法 二.HashSe

Java中TreeMap和TreeSet的底层实现

TreeSet底层则采用NavigableMap这个接口来保存TreeSet集合,而实际上NavigableMap只是一个接口,实际上TreeSet还是用TreeMap来保存set元素. TreeSet初始化的时候会new 一个TreeMap进行初始化: private transient NavigableMap<E,Object> m; TreeSet(NavigableMap<E,Object> m) {        this.m = m;} public TreeSet(

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