• Java——集合(Collection接口),迭代器,增强for循环,泛型


    一、集合

    Collection接口中的方法是集合中所有实现类必须拥有的方法。

    • ArrayList implements List
    • List extends Collection

    1、基本使用

    其他

    import java.util.ArrayList;
    /*
     *  集合体系,
     *    目标  集合本身是一个存储的容器:
     *       必须使用集合存储对象
     *       遍历集合,取出对象
     *       集合自己的特性
     */
    public class ArrayListDemo {
    	public static void main(String[] args) {
    		/*
    		 *  集合ArrayList,存储int类型数
    		 *  集合本身不接受基本类,自动装箱存储
    		 */
    		ArrayList<Integer> array = new ArrayList<Integer>();
    		array.add(11);
    		array.add(12);
    		for(int i = 0 ; i < array.size() ;i++){
    			System.out.println(array.get(i));
    		}
    		/*
    		 *  集合存储自定义的Person类的对象
    		 */
    		ArrayList<Person> arrayPer = new ArrayList<Person>();
    		arrayPer.add(new Person("a",20));
    		arrayPer.add(new Person("b",18));
    		arrayPer.add(new Person("c",22));
    		for(int i = 0 ; i < arrayPer.size();i++){
    			//get(0),取出的对象Person对象
    			//打印的是一个对象,必须调用的toString()
    			System.out.println(arrayPer.get(i));
    		}
    	}
    }

    2、清空集合中的元素

    /*
     * Collection接口的方法
     * void clear() 清空集合中的所有元素
     * 集合容器本身依然存在
     */
    public static void function(){
    	//接口多态的方式调用
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("abc");
    	coll.add("bcd");
    	System.out.println(coll);  // ["abc","bcd"]
    
    	coll.clear();
    
    	System.out.println(coll);
    
    }
    

    3、判断对象是否存在于集合中

    /*
     * Collection接口方法
     * boolean contains(Object o) 判断对象是否存在于集合中,对象存在返回true
     * 方法参数是Object类型
     */
    private static void function_1() {
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("abc");
    	coll.add("money");
    	coll.add("123");
    	
    	boolean b = coll.contains("abc");
    	System.out.println(b);
    }
    

    4、将集合转成数组

    /*  Collection接口方法
     *  Object[] toArray() 集合中的元素,转成一个数组中的元素, 集合转成数组
     *  返回是一个存储对象的数组, 数组存储的数据类型是Object
     */
    private static void function_2() {
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("abc");
    	coll.add("itcast");
    	coll.add("itheima");
    	coll.add("money");
    	coll.add("123");
    	
    	Object[] objs = coll.toArray();
    	for(int i = 0 ; i < objs.length ; i++){
    		System.out.println(objs[i]);
    	}
    }
    

    5、移除元素

    /*
     * Collection接口方法
     * boolean remove(Object o)移除集合中指定的元素
     */
    private static void function_3(){
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("abc");
    	coll.add("money");
    	coll.add("money");
    	coll.add("123");	
    	System.out.println(coll);
    	
    	boolean b = coll.remove("money");  //只会移除第一个
    	System.out.println(b);
    	System.out.println(coll);
    }
    

    二、迭代器

    迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

    集合中的迭代器

    由于Java中有多种不同的集合,我们又想有一个统一的方式来获取它的值,所以有了迭代器。

    接口Iterator : 其中有两个抽象方法

    • boolean hasNext() 判断集合中还有没有可以被取出的元素,如果有返回true
    • next() 取出集合中的下一个元素

    ArrayList重写方法 iterator(),返回了Iterator接口的实现类的对象

    Iterator it = array.iterator(),运行结果就是Iterator接口的实现类的对象

    it是接口的实现类对象,调用方法 hasNext 和 next 集合元素迭代

    1、基本使用

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class CollectionDemo1 {
    	public static void main(String[] args) {
    		//集合可以存储任意类型的对象
    		//集合中,不指定存储的数据类型, 集合就可以什么都存
    		Collection coll = new ArrayList();  // 多态
    		coll.add("abc");
    		coll.add("uyjgtfd");
    		
    		//迭代器获取
    		Iterator it = coll.iterator();
    		while(it.hasNext()){
    			//it.next()获取出来的是什么数据类型,Object类
    			//Object obj = it.next();
    			//System.out.println(obj);
    			String s = (String)it.next();
    			System.out.println(s.length());
    		}
    	}
    }
    

    2、指定迭代数据类型

    public static void main(String[] args) {
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("abc1");
    	coll.add("abc2");
    	coll.add("abc3");
    	coll.add("abc4");
    	//迭代器,对集合ArrayList中的元素进行取出
    	
    	//调用集合的方法iterator()获取出,Iterator接口的实现类的对象
    	Iterator<String> it = coll.iterator();
    	//接口实现类对象,调用方法hasNext()判断集合中是否有元素
    	//boolean b = it.hasNext();
    	//System.out.println(b);
    	//接口的实现类对象,调用方法next()取出集合中的元素
    	//String s = it.next();
    	//System.out.println(s);
    	
    	//迭代是反复内容,使用循环实现,循环的条件,集合中没元素, hasNext()返回了false
    	while(it.hasNext()){
    		String s = it.next();
    		System.out.println(s);
    	}
    	
    	/*for (Iterator<String> it2 = coll.iterator(); it2.hasNext();  ) {  // for循环实现迭代器
    		System.out.println(it2.next());
    	}*/
    	
    }
    

    三、增强for循环

    JDK1.5新特性,增强for循环

    JDK1.5版本后,出现新的接口 java.lang.Iterable,Collection接口是继承Iterable

    增强for循环格式:

    for( 数据类型 变量名 : 数组或者集合 ){

      sout(变量);

    }

    /*
     *  增强for循环遍历集合
     *  存储自定义Person类型
     */
    public static void function_2(){
    	ArrayList<Person> array = new ArrayList<Person>();
    	array.add(new Person("a",20));
    	array.add(new Person("b",10));
    	for(Person p : array){
    		System.out.println(p);
    	}
    }
    
    
    public static void function_1(){
    	//for对于对象数组遍历的时候,能否调用对象的方法呢?当然能,s就是遍历出的对象
    	String[] str = {"abc","itcast","cn"};
    	for(String s : str){
    		System.out.println(s.length());
    	}
    }
    
    /*
     *  实现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]);
    }
    

    四、泛型

    泛型是JDK1.5出现新的安全机制,保证程序的安全性

    • 泛型: 指明了集合中存储数据的类型 <数据类型>
    public static void function(){
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("abc");
    	coll.add("rtyg");
    	coll.add("43rt5yhju");
    	//coll.add(1);
    	
    	Iterator<String> it = coll.iterator();
    	while(it.hasNext()){
    		String s = it.next();
    		System.out.println(s.length());
    	}
    }

    1、带有泛型的类

    /*
     *  带有泛型的类
     *    ArrayList
     *    E: Element 元素, 实际思想就是一个变量而已 
     *    ArrayList<Integer> , E 接受到类型,就是Integer类型
     *    public class ArrayList<E>{
     *    
     *       public boolean add(Integer e){
     *          elementData[size++] = e;
     *       }
     *       
     *       public boolean add(E e){}
     *    }
     *    
     *    Iterator<E> 
     *    E next()
     *    
     *    Iterator<Integer> 
     *    Integer next()
     *   
     */
    public class GenericDemo1 {
    	public static void main(String[] args) {
    		ArrayList<Integer>  array = new ArrayList<Integer> ();
    		array.add(123);
    		array.add(456);
    		// ArrayList集合,自己有个方法
    		// <T> T[] toArray(T[] a) 
    		Integer[] i = new Integer[array.size()];
    		Integer [] j = array.toArray(i);
    		for(Integer k : j){
    			System.out.println(k);
    		}
    
    	}
    }
    

    2、带有泛型的接口

    public static void function(){
    	Collection<String> coll = new ArrayList<String>();
    	coll.add("abc");
    	coll.add("rtyg");
    	coll.add("43rt5yhju");
    	//coll.add(1);
    	
    	Iterator<String> it = coll.iterator();
    	while(it.hasNext()){
    		String s = it.next();
    		System.out.println(s.length());
    	}
    }
    

    3、泛型的通配符

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Iterator;
    
    /*
     *  泛型的通配符
     */
    public class GenericDemo {
    	public static void main(String[] args) {
    		ArrayList<String> array = new ArrayList<String>();
    		
    		HashSet<Integer> set = new HashSet<Integer>();
    		
    		array.add("123");
    		array.add("456");
    		
    		set.add(789);
    		set.add(890);
    		
    		iterator(array);
    		iterator(set);
    	}
    	/*
    	 *  定义方法,可以同时迭代2个集合
    	 *  参数: 怎么实现 , 不能写ArrayList,也不能写HashSet
    	 *  参数: 或者共同实现的接口
    	 *  泛型的通配,匹配所有的数据类型  ?
    	 */
    	public static void iterator(Collection<?> coll){
    		Iterator<?> it = coll.iterator();
    		while(it.hasNext()){
    			//it.next()获取的对象,什么类型
    			System.out.println(it.next());
    		}
    	}
    }
    

    4、示例

    /*
     *  将的酒店员工,厨师,服务员,经理,分别存储到3个集合中
     *  定义方法,可以同时遍历3集合,遍历三个集合的同时,可以调用工作方法
     */
    import java.util.ArrayList;
    import java.util.Iterator;
    public class GenericTest {
    	public static void main(String[] args) {
    		//创建3个集合对象
    		ArrayList<ChuShi> cs = new ArrayList<ChuShi>();
    		ArrayList<FuWuYuan> fwy = new ArrayList<FuWuYuan>();
    		ArrayList<JingLi> jl = new ArrayList<JingLi>();
    		
    		//每个集合存储自己的元素
    		cs.add(new ChuShi("张三", "后厨001"));
    		cs.add(new ChuShi("李四", "后厨002"));
    		
    		fwy.add(new FuWuYuan("翠花", "服务部001"));
    		fwy.add(new FuWuYuan("酸菜", "服务部002"));
    		
    		jl.add(new JingLi("小名", "董事会001", 123456789.32));
    		jl.add(new JingLi("小强", "董事会002", 123456789.33));
    		
    //		ArrayList<String> arrayString = new ArrayList<String>();
    		iterator(jl);
    		iterator(fwy);
    		iterator(cs);
    	
    	}
    	/*
    	 * 定义方法,可以同时遍历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();
    		 }
    	}
    }
    
  • 相关阅读:
    selenium--下拉列表选择
    Java——基本类型包装类,System类,Math类,Arrays类,BigInteger类,BigDecimal类
    Java——Object类,String类,StringBuffer类
    Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,四种访问修饰符,代码块)
    Java——面向对象进阶(构造方法,this,super)
    Java——面向对象进阶(抽象类,接口)
    Java——面向对象编程
    java——类型转换,冒泡排序,选择排序,二分查找,数组的翻转
    CentOS7下安装MySQL
    Java——定义类,引用类数据类型,集合类型(array list)
  • 原文地址:https://www.cnblogs.com/x54256/p/8428436.html
Copyright © 2020-2023  润新知