一、集合



1.概念


集合和数组都是用来存储数据的容器,可以存储多个数据。首先数组的长度是固定的,集合的长度是可变的,而且数组是可以存储基本类型和引用类型的,但是集合只能存储引用类型,如果想存储基本类型,只能储存基本类型的封装类



2.集合的继承图


Collection 接口


| 

 

  |------------------------------------------------| 

 

  List Set 

 

  | | 

 

  -------------- ------------------- 

 

  | | | | 

 

  ArrayList LinkedList HashSet LinkedHashSet


3.集合中通用的方法



1) objece [] toArray() //将集合中的元素,转成数组中的元素--集合转数组


2) 集合.size() //获取集合的长度


3)boolean contains(object obj) //判断对象obj是否存在于集合中


4)void clear(); //清空集合中的所有元素


5)boolean remove(object obj) //在集合中移除元素obj,成功移除返回true




二、迭代器



1.概念


java中集合有很多种,我们要取出这些集合中的元素,可通过一种通用的方式来获取,那就是迭代器。在取元素之前先要判断集合中还有没有元素, 如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。



2.代码展示


/*
	 * Iterator
	 */
	public static void func13()
	{
		ArrayList <Integer>list = new ArrayList<Integer>();
		list.add(11);
		list.add(11);
		list.add(13);
		list.add(14);
		
		Iterator<Integer> it = list.iterator();
	
		while(it.hasNext())
		{
			int i = it.next();
			System.out.println(i);
		}
	}





3.注意事项


1)存储时提升了Object。取出时要使用元素的特有内容,必须向下转型。




三、增强for



1.代码展示


/*
   *  实现for循环,遍历数组
   *  好处: 代码少了,方便对容器遍历
   *  弊端: 没有索引,不能操作容器里面的元素
   */
  public static void function(){
    int[] arr = {3,1,9,0};
    for(int i : arr){
      System.out.println(i+1);
    }
    System.out.println(arr[0]);
  }






四、泛型



1.使用格式


创建对象时,确定泛型的类型


ArrayList<Integer> list = new ArrayList<Integer>();



2.泛型的通配符?


/*
	 *  定义方法,可以同时迭代2个集合
	 *  参数: 怎么实现 , 不能写ArrayList,也不能写HashSet
	 *  参数: 或者共同实现的接口
	 *  泛型的通配,匹配所有的数据类型  ?
	 */
	public static void func15(Collection<?> coll){
	  Iterator<?> it = coll.iterator();
	  while(it.hasNext()){
	    //it.next()获取的对象,什么类型
	    System.out.println(it.next());
	  }
	}




3.通配符的限定


/*
 * 定义方法,可以同时遍历3集合,遍历三个集合的同时,可以调用工作方法 work
 * ? 通配符,迭代器it.next()方法取出来的是Object类型,怎么调用work方法
 * 强制转换:  it.next()=Object o ==> Employee
 * 方法参数: 控制,可以传递Employee对象,也可以传递Employee的子类的对象
 * 泛型的限定  本案例,父类固定Employee,但是子类可以无限?
 *   ? extends Employee 限制的是父类, 上限限定, 可以传递Employee,传递他的子类对象
 *   ? super   Employee 限制的是子类, 下限限定, 可以传递Employee,传递他的父类对象
 */
public static void iterator(ArrayList<? extends Employee> array){
  
   Iterator<? extends Employee> it = array.iterator();
   while(it.hasNext()){
     //获取出的next() 数据类型,是什么Employee
     Employee e = it.next();
     e.work();
   }
}
}