Java编程入门-9-Java常见的集合框架

目录

1.Java常见的集合框架 

 2.list、set、map的区别

3.ArrayList、LinkedList、Vector的区别

4.Map实现类介绍:

5.Set实现类介绍:

6.关于HashMap的常见面试题:

6.1 HashMap与HashTable的区别?

6.2 HashMap的扩容操作是怎么实现的?

6.3 HashMap是怎么解决哈希冲突的?

6.4 HashMap 的数据结构?

END


1.Java常见的集合框架 

 2.list、set、map的区别

  1. ListSet存储单列数据Map存储键值对
  2. List中存储的数据是有顺序的,并且值允许重复;
  3. Set中存储的数据是无顺序的,并且不允许重复(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)。
  4. Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;

3.ArrayList、LinkedList、Vector的区别

ArrayList是动态数组Array的数据结构,便于set和get

LinkedList是链表的数据结构,便于添加和删除

Vector与ArrayList基本相同,但是Vectro是线程安全的,在使用效率上不如ArrayList。

4.Map实现类介绍:

HashMap:基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null键;
HashTable:线程安全,低效,不支持 null 值和 null 键;
LinkedHashMap:是 HashMap 的一个子类,保存了记录的插入顺序;
SortMap 接口:TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序

5.Set实现类介绍:

HashSet:底层是由 Hash Map 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;
LinkedHashSet:继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap

6.关于HashMap的常见面试题:

6.1 HashMap与HashTable的区别?

HashMap没有考虑同步,是线程不安全的;Hashtable使用了synchronized关键字,是线程安全的;

HashMap允许K/V都为null;后者K/V都不允许为null;

HashMap继承自AbstractMap类;而Hashtable继承自Dictionary类;

6.2 HashMap的扩容操作是怎么实现的?

resize()方法。

6.3 HashMap是怎么解决哈希冲突的?

1.开放定址法:开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。

2.链地址法:将哈希表的每个单元作为链表的头结点,所有哈希地址为i的元素构成一个同义词链表。即发生冲突时就把该关键字链在以该单元为头结点的链表的尾部。

3.再哈希法:当哈希地址发生冲突用其他的函数计算另一个哈希函数地址,直到冲突不再产生为止。

4.建立公共溢出区:将哈希表分为基本表和溢出表两部分,发生冲突的元素都放入溢出表中。

6.4 HashMap 的数据结构?

Jdk1.8之前是数组+链表

Jdk1.8之后是数组+链表+红黑树

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值