30.1 集合与数组的区别
- 集合的长度是可变的
- 集合中出存储的元素必须是引用类型数据
30.2 集合的继承关系图
- List允许存储重复的元素
- Set不允许存储重复的元素
30.3 Collection接口的基本方法
- 集合中的元素存放的元素会自动提升为Object类型,需要将元素向下转型为特定的数据类型。
boolean add(E e);
boolean contains(Object o);
boolean remove(Object o);
int size();
Object[] toArray();
void clear();
30.4 Iterator接口
Iterator iterator();
boolean hasNext();
E next();
Iterator<Object> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
30.5 foreach
- JDK1.5后的新特性,collection继承新的接口Iterable,实现增强for循环
- 好处:代码少了; 弊端:没有索引,不能操作容器里的元素;
- 案例
int[] arr = {12,3,2,52,6,4,825,8,994,88};
for(int i:arr){
System.out.println(i);
}
30.6 泛型
- JDK5后的新特性
- 指明元素中存储数据的类型,保证了程序的安全性
- 编译后的class文件,是没有泛型的
- 含有泛型的类/方法/接口
- 好处:避免了强制转换的麻烦,将异常提前到了编译时
class Arraylist<E>{
public boolean A(E e){ ... }
public E B(int index){ ... }
......
}
public static void iterator(Collection<?> coll){
Iterator<?> it = coll.iterator();
while(it.hasNext()){
......
}
......
}
- 泛型的限定
- ? extends Employee 限制的是父类,上限限定,可以传递本类employee和其子类
- ? super Employee 限制的是子类, 下限限定,可以传递本类employee和其父类
public void method(ArrayList<? extends Employee>){
Iterator<? extends Employee> it = new Iterator();
while(it.hasNext()){
......
}
......
}