目录
一、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值