常用集合:List、Set、Map区别及联系

一、List

1.ArrayList

概念:
	在内存中分配连续的空间,实现了长度可变的数组
优点:
	遍历元素和通过索引访问元素的效率比较高
缺点:
	进行添加和删除元素时,需要进行大量的元素移动,效率比较低,按照内容查询的效率比较低

部分方法(与Set类似)

//使用泛型创建一个ArrayList对象
ArrayList<Integer> list = new ArrayList<Integer>();
//ArrayList list = new ArrayList();
list.add(12);
list.add(13);//加到最后自动装箱
list.addAll(0, list);//把list所有元素添加到list中指定索引位置
list.remove(new Integer(13));//删除13
list.set(0, 12);//修改值
list.contains(12)//是否包含12
//遍历输出内容1普通for循环遍历
for (int i = 0; i <list.size() ; i++) {
	System.out.println(list.get(i));
}
//遍历输出内容2增强for循环遍历
for (Object o :list) {
	System.out.println(o);
}
//遍历输出内容3使用Iterator迭代器
Iterator iterator = list.iterator();
while (iterator.hasNext()){
	System.out.println(iterator.next());
}

2.LinkedList

概念:
	采用双向链表的存储方式
优点:
	插入和删除元素的效率比较高
缺点:
	遍历和随机访问元素的效率比较低

部分方法(与Set类似)

List<Integer> list = new LinkedList<Integer>();
list.add(80);//向末尾添加元素,自动装箱
list.add(70);
System.out.println(list.size());//元素的个数

3.ArrayList与LinkedList区别与联系

1.底层结构不同:
	ArrayList:数组
	LinkedList:双向链表
2.使用场合不一样:
	ArrayList:需要大量遍历,根据索引查询的场合适用
	LinkedList:若存在较多的增加、删除操作场合适用
3.LinkedList拥有额外的方法:
	因为LinkedList底层是双向链表,增加了首尾元素的获取添加删除
	addFirst()、addLast()、removeFirst()、removeLast()、getFirst()、getLast()

二、Set

1.HashSet

概念:
	采用HashTable哈希表的存储结构
优点:
	添加速度快、查询速度快、删除速度快
缺点:
	无序

2.LinkedHashSet

概念:
	采用哈希表的存储结构,同时使用链表维护次序
优点:
	有顺序(添加顺序)

3.TreeSet

概念:
	采用二叉树(红黑树)的存储结构
优点:
	有序、查询速度比List快(按照内容查询)
缺点:
	查询速度没有HashSet快

Set总结

	1.HashSet  哈希表  唯一  无序 
	2.LinkedHashSet  哈希表+链表  唯一 有序(添加顺序) 
	3.TreeSet  红黑树 一种二叉平衡树 唯一  有序(自然顺序) 
	3.Set是无序的,不可能提供关于索引位置操作的方法,set针对Collection没有增加任何方法
	4.Set的遍历方式: for-each循环、Iterator迭代器、流式编程forEach

三、Map

1.HashMap

概念:
	采用Hashtable哈希表的存储结构
优点:
	添加速度快  查询速度快 删除速度快
缺点:
	key无序

部分方法

Map<Integer,Student> map = new HashMap<Integer,Student>();
Student stu1 = new Student(1, "zhangsan", 23, 98.2);
Student stu2 = new Student(2, "zhangsan", 23, 98);
map.put(stu1.getSno(), stu1);
map.put(stu2.getSno(), stu2);
//map.remove(1);/删除指定key
//map.clear();//清空
//map.replace(1, new Student(1, "zhaoliu", 23, 100));
map.containsKey(1);//判断是否含有该key
map.containsValue(stu2);//判断是否含由该Value
map.isEmpty();//判断是否为空
//遍历
Set<Entry<Integer,Student>> entrySet =  map.entrySet();
for(Entry<Integer,Student> entry:entrySet){
	Student student = entry.getValue();
	System.out.println(student);
}

2.LinkedHashMap

概念:
	采用哈希表存储结构,同时使用链表维护次序
优点:
	key有序(添加顺序)

3.TreeMap

概念:
	采用二叉树(红黑树)的存储结构
优点:
	key有序  查询速度比List快(按照内容查询)
缺点:
	查询速度没有HashMap快

四、早期集合Vector、Hashtable

1.Vector和ArrayList的联系和区别

原理:
	两者都是长度可变的数组结构,很多情况下可互用
区别:
	1.Vector是早期JDK接口,ArrayList是替代Vector的新接口
	2.Vector线程安全,效率低;ArrayList效率高,线程非安全
	3.扩容机制不同:Vector默认增长一倍,ArrayList增长50%

2.HashMap和Hashtable的联系和区别

原理:
	两者底层都是哈希表,查询速度快,在很多情况下可互用
区别:
	1.Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口
	2.Hashtable继承Dictionary类,HashMap实现Map接口
	3.Hashtable线程安全,HashMap线程非安全
	4.Hashtable不允许null值,HashMap允许null值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值