今日Java小问题:List、Set、Map

1.List 和 Set,Map 的区别:

List 以索引来存取元素,有序的,元素是允许重复的,可以插入多个null。

Set 不能存放重复元素,无序的,只允许一个null

Map 保存键值对映射,键唯一,值可以重复

List 有基于数组、链表实现两种方式

Set、Map 容器有基于哈希存储和红黑树两种方式实现

Set 基于 Map 实现,Set 里的元素值就是 Map的键值


2.HashMap,HashTable的共同点和区别:
HashMap:
底层由链表+数组+红黑树实现
可以存储null键和null值
线性不安全
初始容量为16,扩容每次都是2的n次幂
HashMap是对Map接口的实现

HashTable
HashTable的底层也是由链表+数组+红黑树实现。
无论key还是value都不能为null
它是线性安全的,使用了synchronized关键字。
HashTable实现了Map接口和Dictionary抽象类
Hashtable初始容量为11


3.ArrayList 和 Vector 的区别是什么?
Vector是线程安全的,ArrayList不是线程安全的。

ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。

Vector只要是关键性的操作,方法前面都加了synchronized关键字,来保证线程的安全性

4.Arraylist与LinkedList区别:

ArrayList是数组的数据结构,LinkedList是链表的数据结构。

插入、删除数据时,LinkedList的效率比较高,因为ArrayList要移动数据,ArrayList适用于遍历、查找。

LinkedList比ArrayList开销更大,因为LinkedList的节点除了存储数据,还需要存储引用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值