集合框架

Collection:
List:ArrayList、Vector、ListedList
Set:HashSet->LinkedHashSet、TreeSet
Map:HashMap、TreeMap

**
Collection:
Collection接口:用于存储单个对象的集合
List集合:
1、有序 2、允许多个null 元素 3、常用的具体实现有:ArrayList、Vector、ListedList

ArrayList实现原理
1)采用动态数组实现,默认创建空数组
2)第一次添加元素。扩充容量为10,之后的扩充算法:原来数组大小加上原来数组大小的一半
3)不适合删除、插入
4)为了防止数组动态扩充的次数过多,建议创建ArrayList时,给初值
5、线程不安全、适合在单线程访问时使用时效率较高

Vector实现原理:
1)采用动态数组实现、默认构造方法创建一个空数组
2)扩充的算法:当增量为0时,扩充大小的两倍;当增量不为0时,扩充为原来大小+增量
3)不适合删除、插入
4)为了防止数组动态扩充的次数过多,建议创建Vector时,给初值
5)线程安全,适合在多线程访问时使用,效率较低

LinkedList实现原理:
1)实现原理,采用双向链表结构实现
2)适合插入、删除操作,性能高
3)线程不安全

Set:
1、无序(不保证顺序)
2、不允许重复元素

HashSet:
1)实现原理,基于哈希表(HashMap:数组+链表)实现
2)不允许重复,可以有一个NULL元素
3)不保证顺序恒久不变
4)添加元素时,把元素作为HashMap的key存储,HashMap的value使用一个固定的Object

TreeSet:
1)有序的、基于TreeMap(二叉树数据结构),对象需要比较大小,通过对象比较器来实现
对象比较器还可以用来去除重复元素,如果自定义的数据类没有实现比较器接口,无法添加到TreeSet里面

LinkedHashSet:
哈希表和链接列表的实现
维护着一个所有条目的双重链接链表。此链表列表定义了迭代的顺序,
即按照将元素插入到Set中的顺序(插入顺序)进行迭代。

Map:
1、键值对存储一组对象
2、Key不能重复,Value可以重复
3、剧吐实现类:HashMap、TreeMap、Hashtable、LinkedHashMap

HashMap:
1)实现原理,基于哈希表(数组+链表+二叉树(红黑树))在1.8JDK加入红黑树
2)默认加载因子0.75,默认大小为16
数组扩充原理:当数组的容量超过75%,那么表示数组需要扩充,如何扩充?
扩充的算法:当前数组容量<<1,(相当是扩大一倍)
3)把对象存储到哈希表中,如何存储?
把key对象通过Hash()方法计算Hash值,然后用这个hash值对数组长度取余数(默认为16)
来决定该key对象在数组中存储的位置,当这个位置有多个对象时,以链表结构存储。
JDK1.8后,当链表长度大于8时,链表将转换为红黑树结构存储
目的:取值时提高效率,存储数据越大,性能表现越明显

  扩充次数过多,会影响性能,表示哈希表重新散列(重新计算每个对象的存储位置)
  在开发中尽量减小扩充次数带来的性能

4)线程不安全,适合在单线程使用

HashTable:
1)基于链表实现(数组+链表)
2)默认数组大小为11,加载因子0.75
3)扩充方式,原数组大小 (*2+1);
4)线程安全,用在多线程访问时

LinkedHashMap:
1)是HashMap()子类,由于HahsMAp不能保证顺序恒久不变,此类使用一个双重链表维护元素添加

队列
Queue接口:
队列,先进先出的数据结构
LinkedList类实现了Queue接口
Queue queue=new LinkedList();//使用queue里面的函数
Deque接口:在双端队列的两端访问元素的方法。提供插入、移除、和检查元素的方法
Deque deque=new LinkedList();//使用deque里面的函数


Stack类:代表先进先出

面试:
1、ArrayList与Vector的区别
2、如何选择:
1、安全性问题
2、是否频繁插入、删除操作(LinkedList)
3、是否经常遍历
3、在Java的集合中,判断两个对象是否相等
1)判断两个对象的HashCode是否相等
如果相等,转入2
2)判断两个对象用equals运算是否相等
如果不相等,认为两个对象不相等,结束
如果相等,认为对象相等

工具类(操作集合):
Collections:
1、排序操作
1)reverse
2) shuffle
3) sort
4) swap
5) rotate
2、查找和替换
1)binarySearch
2)max
3)min
4)fill
5)replace
6)frequency

**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值