java集合框架比较_java集合框架总结(三)

Link接口总结完了,接下来是set接口

Set接口

特征:

– Set接口存储一组唯一,无序的对象

– (存入和取出的顺序丌一定一致)

– 操作数据的方法不List类似,Set接口丌存在get()方法

– 不可以通过下标获取对应位置的元素值,因为无序

实现类:

1、HashSet:

-采用Hashtable哈希表存储结构

–优点:添加速度快,查询速度快,删除速度快

–缺点:无序

2、LinkedHashSet

▪ 采用哈希表存储结构,同时使用链表维护次序

▪有序(添加顺序)

3、TreeSet

–采用二叉树(红黑树)的存储结构

–优点:有序(排序后的升序)查询速度比List快

–缺点:查询速度没有HashSet快

HashSet

首先是说一下hash表,根据定义:是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

hashSet操作:

1、每次写hash表的时候都需要重新定义equals和hashcode,来确保表中的同一对象唯一,设置元素的时候,如果是自定义对象,会查找对象中的equals和hashcode的方法,如果没有,比较的是地址。

2、 HashSet是如何保证元素的唯一性的呢?

答:是通过元素的两个方法,hashCode和equals方法来完成

如果元素的HashCode值相同,才会判断equals是否为true

如果元素的hashCode值丌同,丌会调用equals方法

TreeSet

定义:

它是由_n(n>=1_)个有限结点组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点,每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。

特征:

– 采用二叉树(红黑树)的存储结构(树的接口可以参考数据结构书,这里不作详细解释)

– 优点:有序(排序后的升序)查询速度比List快

– 缺点:查询速度没有HashSet快

排序接口与方法

1、Comparator

java.util.Comparator 接口的实现类可以传递给sort方法(如Collections.sort或Arrays.sort)

Comparator接口中包含一个int compare(T o1,T o2)用来比较排序的两个参数(重写)

如果o1

如果o1=o2,返回0

如果o1>o2,返回正整数

2、Comparable接口

上面的算法根据什么确定集合中对象的“大小”顺序?

• 所有可以“排序”的类都实现了java.lang.Comparable 接口,

Comparable接口中只有一个方法public int compareTo(Object obj);

该方法:

返回正数 this > obj

返回复数 this < obj

返回 0 this == obj

实现了Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式,如果返回正数,this排在obj的后面

比较器的分类(确定位置):内部比较器 定义在元素的类中,通过comparable接口来实现

外部比较器 定义在当前类中,通过实现comparator接口来实现,但是要将该比较器传递到集合中外部比较器实现语法:

public class SetDemo implements Comparator TreeSet treeSet = new TreeSet(new SetDemo());

注意:

1、外部比较器可以定义为一个工具类,此时所有需要比较的规则如果一致,可以复用

2、内部比较器只有在存储当前对象的时候才能使用

3、如果两者同时存在,听外部比较器的

4、当使用比较器的时候,不会调用equals方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值