0129 集合 迭代器 增强for

1、集合

首先回顾一下ArrayList集合

public class Demo01 {

	public static void main(String[] args) {
		ArrayList<Person> arr=new ArrayList<Person>();
		Person p=new Person("小红",18);
		Person p1=new Person("小黑",19);
		arr.add(p);
		arr.add(p1);
		for(int i=0;i<arr.size();i++){
			System.out.println(arr.get(i));
		}
	}

}

  集合的继承和实现关系图

 

由图可以看出,ArrayList类实现了List接口,而list接口又继承了Collection接口,也就是说ArrayList类已经将所有的方法重写。

list特点允许有重复元素,有序存储,有下标

set特点不允许存储重复元素,无序存储,无下标

由图可以看出Colletion是一个接口,所以不能创建对象,所以我们只能利用多态,父类引用变量指向子类对象的方式去创建集合对象,去调用方法。

集合中常用的成员方法

(1)add(E e);添加元素

(2)clear();清空集合

(3)contains(object obj);判断obj是否存在这个集合

(4)remove(object obj);将obj移出集合

(5)size();集合长度

(6)toArray();返回一个object类型的数组

例:代码展示

public class Demo02 {

	public static void main(String[] args) {
		Collection<Integer> col=new ArrayList<Integer>();
		//添加元素
		col.add(123);
		col.add(456);
		//删除
		//col.remove(456);
		//清空
		//col.clear();
		//判断是否存在元素
		boolean f=col.contains(456);
		System.out.println(f);	
		//转为数组
		Object[] brr=col.toArray();
		System.out.println(Arrays.toString(brr));
	}
}

 那么有了集合是不是就可以遍历了,那现在这个collection中没有get方法去访问下标,但是他的子类ArrayList有get方法,但是多态在调用方法时不可以直接调用子类的独有的方法,那么需要对象向下转型之后才可以调用子类独有的方法,代码展示

                 if(col instanceof ArrayList){
			ArrayList<Integer> arr=(ArrayList<Integer>)col;
			for(int i=0;i<arr.size();i++){
				System.out.println(arr.get(i));
			}
		}

  

2、迭代器

由继承关系图我们总结出,继承collection的两个接口,并不是所有的子类都有下标的功能,那没有下标就不能遍历了吗?所以java提供了一种通用的遍历方法,叫迭代器,无论有没有下标我都能遍历和访问。

 iterator迭代器,iterator是一个接口,接口很明显不能创建对象,那么没有对象就不能调用成员方法。要想调用迭代器中的方法,用到collection的一个超级父类iterable接口中的iterator(),这个方法的返回值就是一个iterator迭代器对象。那么说这个超级父类iterable也是个接口也不能创建对象,但是他有子类,他创建不了,他的子类可以创建。简单讲:创建一个collection子类对象,调用父类接口iterable中的iterator()方法,这时就获取了一个iterator对象,就可以用这个对象调用成员方法了

图解:

 

 

成员方法:

hasNext();返回值是布尔类型,返回值如果为true则说明还有元素,则继续迭代

next();返回值是泛型,泛型是创建对象时什么类型这个泛型就是什么类型

代码展示

public static void main(String[] args) {
		// TODO Auto-generated method stub

		Collection<String> col=new ArrayList<String>();
		//存
		col.add("hello");
		col.add("你好");
		//迭代
		//获取迭代器对象
		Iterator<String> it=col.iterator();
		//判断下个元素是否有
		while(it.hasNext()){
			System.out.println(it.next);
		}
	}

  3、增强for

增强for的底层就是一个迭代器

格式:for(你要遍历的元素的数据类型 变量名:要遍历的那个数据容器){   };

代码展示:

public class Demo04 {

	public static void main(String[] args) {
		Collection<Double> col=new ArrayList<Double>();
		col.add(1.2);
		col.add(2.3);
		col.add(4.3);
		//增强for循环
		//for(你要遍历集合的存储数据类型 变量名:集合的容器名字)
		for(double d:col){
			System.out.println(d);
		}
		String[] arr={"b","c","f","e"};
		for(String f:arr){
			System.out.println(f);
		}
	}
}

  

posted @ 2021-01-29 16:40  公雪  阅读(114)  评论(0编辑  收藏  举报