30#ArrayList&Iterator&foreach&泛型

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();
  • Iterator的方法
boolean hasNext();
E next();
  • 演示
Iterator<Object> iterator = list.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
  • Iterator实现原理图

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){ ... }
   ......
}
  • 匹配所有的数据类型Collection<?>
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()){
      ......
   }
   ......
}

猜你喜欢

转载自blog.csdn.net/weixin_43660263/article/details/86560718