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