1 对象数组
Student类不再书写。
但是数组的长度是固定的,集合类可以存储任意对象,长度也是可以改变的。
2 集合体系图
因为Collection是一个接口,不能被实例化。
3 Collection中的方法
Collection c = new ArrayList();//父类引用指向子类对象
4 基本方法
package com.haidai.collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo1 {
public static void main(String[] args) {
Collection c = new ArrayList();//父类引用指向子类对象
c.add("a");
c.add("b");
c.add("c");
System.out.println(c);
System.out.println(c.size());//集合大小
c.remove("a");
c.remove("b");
System.out.println(c);
c.contains("c");//是否包含
c.clear();
System.out.println(c);
}
}
5 集合转数组并遍历
package com.haidai.collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo2 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
c.add("e");
Object[] array = c.toArray();//集合转换数组
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
6 迭代器
package com.haidai.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo3 {
public static void main(String[] args) {
//demo1();
Collection c = new ArrayList();
c.add(new Student("王磊",23));
c.add(new Student("朱宏林",23));
c.add(new Student("刘洋",23));
c.add(new Student("李道辉",23));
Iterator it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
Student t = (Student) it.next();//这里为什么要强转Student呢?因为it.next()是Object类型
}
}
private static void demo1() {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
//获取迭代器迭代集合中的元素
Iterator it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
7 List
list也是一个接口,他是collection的子类,所以只需要看他和Collection不同的方法就可以了。
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add(1,"e");//在列表指定位置添加元素
System.out.println(list);
}
8 并发修改和异常查询问题
当遇到了未知的错误的时候,先把错误拷贝至JDK1.6文档中查询,上面的错误叫做并发修改错误,产生的原因在于,list大小为6,迭代器接受的大小也是6,但是在遍历中却发生了修改,导致了错误的发生。
解决方法:使用List集合特有的迭代器ListIterator。
8 数据结构之数组(一排格子)和链表(监狱风云)
关于数组,当我们每次增加元素时或者减少元素时都很慢,这是因为数组一旦初始化就不能改变大小,所以底层先创建一个更大的数组,然后再继续复制元素到新的数组。所以增删元素非常慢,但是它查询修改快,就是因为它具有索引,可以通过索引快速查找修改数组中的元素。
关于链表,我相信不需要叙述了。