集合(3)

本文介绍了Java中List,Set,Map(包括HashSet,HashMap,TreeMap)以及泛型的基本概念、底层实现、操作原理和注意事项,重点讲解了哈希冲突处理和数据结构的选择。
摘要由CSDN通过智能技术生成

List有序可重复

ArrayList:查询快,底层是数组

LinkedList:添加删除块,底层是双向链表

Set无序不可重复

HashSet:底层是散列表

TreeSet:底层是红黑树,元素必须有序

Map 无序,key不能重复,value能重复,保存映射关系

HashMap:底层散列表

TreeMap:底层是红黑树,元素必须有序

1. 散列表

1.1. 概述

1.2. HashSet

当我们使用HashSet的时候,其实就等于是在使用HashMap

添加数据的时候,虽然调用的是HashSet的add方法,但是本质还是调用map的put方法

PS:在map中,put是添加操作

而map中,需要保存的是k和v映射关系,所以在set中有一个变量保存了value的值,所以我们在进行set添加的时候只操作了map中的key,value值我们不再关心

2. Map

只要是保存键值对的用map

2.1. 概述

散列表:用于存储键值对映射关系(K--V),存储方式为数组中保存链表,用于解决哈希冲突问题

Java中散列表对应的就是HashSet

但是从1.8开始,为了提高查询效率,引进了红黑树

想要把数据添加在散列表中,需要根据key生成hash值(Java中指的hashCode方法),然后根据算法得到数组下标

如果下标中没有对应的数据,则添加到数组中即可

如果下标中有对应的数据,则需要调用要添加的key和对应的数据进行比较(equals),如果 发生重复,则value值替换

如果不重复,说明是hash冲突,则把k--v插入到对应的链表中(节点对象中,包含 4个属性:hash值、key、value、next)

相同对象生成多次hash,一定是相同的值,但是不同对象也有可能生成相同的hash值,叫哈希冲突

2.2. 继承体系

2.3. 常用方法

2.4. HashMap

遍历:

2.5. TreeMap

默认自带一个Comparator,如果排序顺序不满足或者其他原因,则可以覆写Comparator或着Comparable

会按照key排序,所以使用treeMap时,key必须有两个比较器中任意一种

注意,因为TreeMap会排序,需要比较,所以类型必须一致

意味着treeMap中必须保存同类型的数据

3. 泛型

3.1. 概述

泛型:类型检查

没有使用泛型之前,集合中可以存储任意类型的数据,均会转型为Object类型

优点:什么 都能放

缺点:由于什么都能放,导致获取数据时,得到的是Object,想要使用对象特有属性时,需要强制类型转换(向下转型)

使用泛型之后,集合中只能保存单一类型的数据

优点:由于保存数据的类型一致,所以使用的时候,不需要向下转型

缺点:只能保存单一数据类型

泛型:只能写引用类型,不能写基本类型,如果要保存数字,应该写Integer类型(对应的包装类)

3.2. 使用方式

3.3. 注意

3.4. 自定义泛型

4. 面试题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值