开始时间:2018年8月18日17:00:45
结束时间 :2018年8月18日18:19:32
累计时间 :
知识点补充:
存放数据的容器: 数组:
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()
如果集合当中没有操作的该元素,会抛出异常:
去除List 集合当中的重复元素:
====================
以下三组方法; 在JDK1.6时候存在:如果集合当中没有可操作的元素,返回null。
添加头和尾
offerFirst(E e)
offerLast(E e)
获得头和尾:
peekFirst()
peekLast()
移除头和尾部;
pollFirst()
pollLast()
push();
栈: Stack : 特点: FILO: 先进后出:
队列: Queue : 特点: FIFO:先进先出:
图中没有提到map 作补充 后面再补一张图:
List集合与Map集合的关系
从底层实现来看,Set集合和Map集合很类似;从用法的角度来看,List集合和Map集合也有很多类似的地方。
- Map接口提供了get(K key)方法,允许Map对象根据key来取得对应的value。
- List接口提供了get(int index)方法,允许List对象根据元素索引index来取得对应的value。
即可以说List相当于所有key都是int类型的Map,也可以说Map是相当于索引是任意类型的List。
2018年8月18日17:44:06于易动
不太完整 待更ing。。