Java集合框架

数组(可以存储基本数据类型)是用来存现对象的一种容器 但是数组的长度固定 不适合在对象数量未知的情况下使用

集合(只能存储对象,对象类型可以不一样)的长度可变 可在多数情况下使用

实线边框的是实现类  折线边框的是抽象类  点线边框的是接口

Collection接口是集合类的根接口 Java中没有提供这个接口的直接的实现类 但却让其被继承产生了两个接口 Set和List

Set中不能包含重复的元素

List是一个有序的集合 可以包含重复的元素 提供了按索引访问的方式

Map是Java.util包中的另一个接口 它和Collection接口相互独立 但是都属于集合类的一部分

Map包含了键值对(key-value)

Map不能包含重复的key 但可以包含相同的value

所有的集合类都实现了Iterator接口 这是一个用于遍历集合中元素的接口 主要包含以下方法:

1.hasNext()是否还有下一个元素

2.next()返回下一个元素

3.remove()删除当前元素

ArrayList 与 LinkedList 之间的区别

数组和链表在CURD上的区别

1.ArrayList是实现了动态数组的数据结构 LinkedList基于链表的数据结构

2.对于随机访问 get set ArrayList绝对优于LinkedList

3.对于新增和删除操作 add 和 remove   LinkedList比较占优势

 

ArrayList数组默认长度为10 扩容1.5倍

add() 尾部添加 remove(index)(E element)

LinkList双链表(不带头结点) add() 尾插

 

数组和ArrayList之间的区别

1.数组大小不能改变 ArrayList实现扩容缩容操作

2.数组类型可以为基本数据类型或引用数据类型

   ArrayList只能为引用数据类型

 

ArrayList和Vector的区别

   初始化大小是否用于多线程                                     扩容
ArrayList          10           是     1.5倍     oldCapacity+oldCapacity>>1
Vector          10           否   2倍   oldCapacity + ((capacityIncrement > 0) ?           capacityIncrement : oldCapacity);

 

 

 

 

 

Map

Map 提供了一种映射关系 其中的元素是以键值对(key-value)的形式存储的 能够实现根据key快速查找value(键不能重复)

HashMap

1.HashMap是Map的一个重要实现类 也是最常用的 基于哈希表实现

哈希算法

根据设定的哈希函数和处理冲突方法将一组关键字映象到一个有限的地址区间上的算法

哈希表 

数据经过哈希算法之后得到的集合

由此方法可以确定关键字和数据在集合中的位置存在一定的关系 易于快速查询

哈希冲突

哈希算法被计算的数据是无限的 而计算后的结果范围有限 导致不同的数据经过计算后得到相同的值 即哈希冲突。

解决哈希冲突的方式

线性探测法、连地址法、建立公共溢出区等 

HashMap使用的链地址法

加载因子

加载因子越大 填满的元素就越多 空间利用率高 但冲突的机会加大 查找效率变低(因为链表变长了)

加载因子越小 填满的元素就越少 空间利用率低 冲突的机会减小 查找效率高(链表不长) 很多空间还没有利用就开始扩容 频繁扩容导致耗费性

推荐链接 :https://www.jianshu.com/p/dff8f4641814

 

HashMap和HashTable的区别

HashMap适用于单线程 允许存在一个为null的key 多个为null的value

HashTable适用于多线程   值不能为空 键不能为空

 

LinkedHashMap

保存插入顺序 在利用 Iterator遍历LinkedHashMap时 先得到的先插入

速度慢 LinkedHashMap的遍历速度只与实际数据有关 与容量无关  

            HashMap的遍历速度与容量有关

 

参考链接

https://www.cnblogs.com/leeplogs/p/5891861.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值