Collection体系
在学习Collection体系的时候首先应该从整体看:
知识点补充:
存放数据的容器: 数组:
1: 数组的长度固定:
Student stu[] = new Student[20];
new Student(“lisi”,21);
数组扩容:
(1)创建一个临时的数组:
(2)将数组的内容copy到 临时数组。
(3)原来的数组扩容:
(4)把临时数组当中的内容copy回来:
2: 集合: 存放数据。
当存放的内容数量不固定,不确定,有限采用集合。
3: 区别:
(1)数组的长度是固定。
数组存放的数据类型,必须相同或者是相兼容:
(2)集合自动扩容。
集合当中可以存放任意的数据类型:
一: 集合:
1: 在JDK1.0 时候,提供了集合:
线性表:
Vector
|
stack
映射结构:
Dictionary(目录)
|
Hashtable
|
Properties
在JDK1.2 新添加了集合类: 形成了集合框架:
线性表结构:
Collection(接口)
|-------List: (接口) 允许重复元素:
|------ArrayList: (重要)
|------Vector:
|------Stack:
|------LinkedList:
|-------Set: (接口) 元素不能重复:
|------HashSet:
|------TreeSet:
|------LinkedHashSet:
|-------Queue: (接口)
|------LinkedList:
实现类: 底层根据数据结构不同而区分:
映射结构;
Map
|----HashMap: (重点)
|----TreeMap:
|----Hashtable:
|----Properties: (重点)
学习: 看顶层,用底层:
二: 集合: 位于java.util.*;
Collection :接口:
add(Object obj);
addAll(Collection c);
remove(Object);
removeAll(Collection c);
clear();
size();
contains();
containsAll();
isEmpty();
toArray();
retainAll();
iterator();
三: 集合的细节:
- 1: 存放在集合当中,存放对象的引用:
- 2: 往集合当中存放内容, 元素失去了原有的类型,自动提升为Object类型:
- 3: 集合当中不能存放基本数据类型,但是在JDK1.5后,有自动装箱功能:
四: List接口:
特点: 存放的元素有序,可重复, 支持下标访问。
List集合: 围绕索引添加了一系列的方法:
增加:
add(index, obj);
addAll(int index, Collection<? extends E> c)
删除:
remove(int index) ;
改:
set(int index, E element)
查:
get(int index)
一:集合:
Collection集合:
|—List: 元素可重复,有序,支持下标访问:
|----ArrayList: 底层是数组: 查询块, 增删相比稍慢,可以被接收。
该类的所有的方法都是异步:数据不安全, 效率高。
|---- new ArrayList(); 初始容量大小为10. 加载因子: 0.5。 50%扩展:
|---- new ArrayList(Collection c);将Collection集合 的实现类转换成一个ArrayList集合:
|---- new ArrayList(int num); 指定初始容量大小: (不建议使用:)
|----Vector类: 底层数组: 该类已经被ArrayList取代。
该类的实现:线程同步, 数据安全, 效率低。
|---- new Vector(); 创建一个空集合: 初始容量大小为10, 两倍扩展: 底层数组: 方法实现: 同步,数据安全,
效率低
|----- new Vector(Collection<? extends E> c) 将一些其他的集合对象转换成Vector集合:
|------elements(); 获得一个枚举: 元素的个数可以被列举:
|-----LinkedList :类: 底层是链表结构: 主要是针对头元素和尾元素进行操作:
其他 在思维导图中已经全部说明。
二 : 面试问题;
(1) Vector 和 ArrayList的区别:
共同点:
不同点:
(2) 给定一个ArrayList集合, 使用枚举遍历;
(3) String StringBuilder StringBuffer 三者之间的异同点:
StringBuilder: 线程异步, 数据不安全, 效率高。
StringBuffer: 线程同步,数据安全, 效率低:
(4) 面试问题: 模拟队列: LinkedList:
// 模拟栈结构:
三: LinkedList: 类:
API方法“:
添加头和尾:
addFirst(E e)
addLast(E e)
获得头和尾:
getFirst()
getLast();
移除头和尾部;
removeFirst()
removeLast()
如果集合当中没有操作的该元素,会抛出异常: