为什么用集合框架
如果不知道需要多少对象,或者用较为复杂的方式存储对象,可以用集合框架
集合框架包含的内容
ArrayList
实践
.size()
.add(Object o) .add(int index, Object o)
.get(int index)
.contains(Object o)
.remove(Object o) .remove(int index)
public static void main(String[] args) {
List dogs = new ArrayList();
dogs.add(new Dog("yiyi")); // 0
dogs.add(new Dog("erer")); // 1
dogs.add(new Dog("sasa")); // 2 -> yiyi
dogs.add(new Dog("sisi"));
Dog yiyi = new Dog("yiyi");
dogs.add(2, yiyi);
/*
dogs.size()
(Dog)dogs.get(i)
上面的,再.getName()
*/
System.out.println(dogs.size());
for(int i = 0; i < dogs.size(); i++){
System.out.println(((Dog)dogs.get(i)).getName());
}
System.out.println();
// 。contains(Object)
System.out.println(dogs.contains(yiyi)); // true
System.out.println();
// .remove() 序号或者Object
dogs.remove(2);
System.out.println(dogs.contains(yiyi)); // false
System.out.println();
for(int i = 0; i < dogs.size(); i++){
System.out.println(((Dog)dogs.get(i)).getName());
}
}
源码分析
ArrayList概述
数组实现, 与Vector相类似,但vector 是比较老的集合,线程安全;ArrayList是线程不安全
2.ArrayList数据结构
数组, Object类型的元素
3. 源码分析
继承和层次关系
分析:
a. 为什么ArrayList类和List接口之间,要夹一个AbstractList类?
AbstractList 是抽象类,除了List接口,还有一些通用的方法,用来抽取底层的所有通用方法先一起实现。所以说,还有其他的类又这个AbstractList类的继承。
b. 剩下的cloneable/ Serializable/ RandomAccess 接口
Random Access:快速随机存取,用for循环效率更高。否则,用iterator来迭代更好
Coloneable:可以用.clone()
Serializable:可以序列化,即从类变成字节流,从字节流变成类
属性
size/ Max_Array_Size等
构造方法和其他方法的源码
看源码,跳过
LinkedList
实践
在任何位置集合的任何位置(头、中间、尾)进行添加、获取、删除狗狗对象
.addFirst(Object o) .addLast(Object o)
.getFirst() .getLast()
.removeFirst() .removeLast()
public static void main(String[] args) {
LinkedList<Object> Dogs = new LinkedList<>();
Dog yiyi = new Dog("yiyi");
Dog erer = new Dog("erer");
Dog sansan = new Dog("sansan");
Dog sisi = new Dog("sisi");
/*
先在头加入 erer
再在头加入 yiyi
*/
Dogs.addFirst(erer);
Dogs.addFirst(yiyi);
for(int i = 0; i < Dogs.size(); i++){
System.out.println(((Dog)Dogs.get(i)).getName());
}
/*
获取Last的Dog名字, erer
*/
System.out.println(((Dog)Dogs.getLast()).getName());
}
源码分析
LinkList概述
双向链表,插入删除高效
AbstractSequentialList-> 可以当作堆栈、队列、双端队列进行操作
List -> 可当作队列操作
Deque -> 可当双端队列使用
Cloneable: 可克隆; Serializable:可序列化
LinkList的数据结构
双向链表
LinkedList特性
a. 链表、适合频繁插入、删除
b. 可以当作队列
c. 顺序存取,每次操作必须按照从开始到结束的顺序遍历;而不是像ArrayList那样,可以通过index实现随机访问
属性、构造方法等
size first last
空参构造、有参构造等
HashMap
ke-map
Colection 啊、泛型啊啥的,too long no see
等碰到了再看吧