首先我们要了解什么是集合?
正所谓容器,比如说杯子是装水的容器,衣柜是装衣服的容器,那么集合就是装数据的容器。
集合有什么特点呢?
1.集合长度是可变的
2.集合用来存储对象
集合和数组有什么区别呢?
1.数组用可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型。
2.数组长度一旦定义就不可变了,集合长度是可变的。
3.数组只能存储同一种类型的数据,集合可以存储多种类型的对象。
常用的集合有哪些呢?
集合分为两种Collection和Map
Collection下面的接口有List和Set,Map的实现类有HashMap,Hashtable,TreeMap,LinkedHashMap,ConcurrentMap
List接口的实现类有ArrayList和LinkedList和Vector
Set接口的实现类有HashSet,LinkedHashSet,TreeSet
那么List,Set,Map之间有什么区别呢?
List是有序的,可重复的
Set是无序的,不可重复的
Map存储的是键值对(key-value),key是无序的,不可重复的,value是无序的,可重复的
集合框架的底层数据结构分别是什么呢?
ArrayList:Object类型的数组
vector:Object类型的数组
LinkedList:双向循环链表
TreeSet:红黑树
HashSet:基于HashMap实现的
LinkedHashSet:基于LinkedHashMap实现的
TreeMap:红黑树
HashMap:在jdk8以前用数组+链表,jdk8以后也是数组+链表但是当链表长度大于8时,链表会转化成红黑树(这样的话查找效率会增加)
LinkedHashMap:和HashMap相同,唯一添加的就是双向链表,这样使得它可以顺序存储,也可以进行顺序操作
Hashtable:数组+链表
那些集合是线程安全的?
1.vector
2.堆栈类
3.Hashtable(底层方法都加了synchronize)
如何确保集合不被修改?
建立一个只读集合使用Collections.unmodifiableCollection(list)
什么是迭代器,如何使用
Iterator:可以遍历任何Collection接口
使用:
List<String> list = new ArrayList<String>;
Iterator<String> it = list.iterator();
while(it.hasNext){
String its = it.Next();
System.out.println(its)
}
如何边遍历边移出
List<String> list = new ArrayList<String>;
Iterator<String> it = list.iterator();
while(it.hasNext){
it.remove();
}
Iterator和ListIterator有什么区别
1.前者可以遍历List和Set,后者只能遍历List
2.前者只能单向遍历,后者可以双向遍历
随后分别介绍各种集合
Collection接口
1.List接口
ArrayList的优缺点
优点:底层数组实现,查找快
顺序添加元素方便
缺点:插入和删除元素时候,需要做一次复制操作,耗费性能
如何实现数组和List之间的转换
数组->List: Arrays.asList(array)
List->数组: list.toArray()