javaSE___集合体系02——Collection集合、迭代器

Collection集合

一、Collection集合的基本功能测试

第一个方法:boolean add(E e) 添加元素,测试如下:
public static void main(String[] args) {
        Collection c = new ArrayList();		//父类引用指向子类对象
        boolean b1 = c.add("abc");
        boolean b2 = c.add(true);			//自动装箱new Boolean(true);
        boolean b3 = c.add(100);
        boolean b5 = c.add("abc");

        System.out.println(b1);             //true
        System.out.println(b2);             //true
        System.out.println(b3);             //true
        System.out.println(b5);             //true

        System.out.println(c);   //[abc, true, 100, abc]
    }

   1、我们发现,不管我们添加什么,它输出的都是true,因为子类ArrayList的add方法,不管是添加什么,都是返回true,这只是在List集合中全部返回都是true,如果是在set集合中存储重复的值,它就给你返回false。
   2、最后一条输出语句,它都是按顺序添加输出的,同样ArrayList的父类的父类重写了toString方法,所以能把值都给输出来,如果没有重写ToString方法,那么它输出的应该是 //左边是类名,中间是@符号,右边是一个hashcode16进值,比如:com.chenjiangang.domain.User@7185d3cc

第二个方法:boolean remove(Object o) 删除元素,测试如下:
public static void main(String[] args) {
		Collection c = new ArrayList();		
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		c.remove("b");				//删除指定元素
		System.out.println(c);		//[a, c, d]
	}
第三个方法:void clear() 清空集合,测试如下:
public static void main(String[] args) {
		Collection c = new ArrayList();		
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		c.clear();					//清空集合
		System.out.println(c);		//[]
	}
第四个方法:boolean contains(Object o) 判断是否包含,测试如下:
public static void main(String[] args) {
		Collection c = new ArrayList();		
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		System.out.println(c.contains("b"));	//判断是否包含    输出为true
	}
第五个方法:boolean isEmpty() 判断是否为空,测试如下:
public static void main(String[] args) {
		Collection c = new ArrayList();		
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		System.out.println(c.isEmpty());    //判断是否为空     输出为false
	}
第六个方法:int size() 获取元素的个数,测试如下:
public static void main(String[] args) {
		Collection c = new ArrayList();		
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		System.out.println(c.size()); 	    //获取元素的个数     输出为4
	}

二、Collection集合的遍历之集合转数组遍历。

我们这里不用迭代器,用迭代不用这么麻烦。

1、第一个例子,添加的是字符串。
public static void main(String[] args) {
		
		Collection c = new ArrayList();
		c.add("a");
		c.add("b");
		c.add("c");
		c.add("d");
		
		Object[] arr = c.toArray();						//将集合转换成数组
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);			//a,b,c,d
		}
	}
2、第二个例子,添加的是自定义对象。
public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(new Student("张三", 23));			
		c.add(new Student("李四", 24));
		c.add(new Student("王五", 25));
		c.add(new Student("赵六", 26));
		
		Object[] arr = c.toArray();				//将集合转换成数组
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);			//输出张三李四王五赵六
		}
	}
3、在第二个例子的基础上,我们做一下扩展,我们不直接打印arr,获取了再打印。
Collection c = new ArrayList();
		c.add(new Student("张三", 23));				//Object obj = new Student("张三",23);
		c.add(new Student("李四", 24));
		c.add(new Student("王五", 25));
		c.add(new Student("赵六", 26));
		
		Object[] arr = c.toArray();					//将集合转换成数组
		for (int i = 0; i < arr.length; i++) {
			//System.out.println(arr[i]);
			Student s = (Student)arr[i];			//向下转型
			System.out.println(s.getName() + "..." + s.getAge());   //输出张三李四王五赵六
		}

三、Collection集合的带All功能测试

1、第一个方法,boolean addAll(Collection c) 一个集合到另一个集合中去,测试如下:
public static void demo1() {
		Collection c1 = new ArrayList();
		c1.add("a");
		c1.add("b");
		c1.add("c");
		c1.add("d");
		
		Collection c2 = new ArrayList();			//alt + shift + r 选定一个可以全部改名
		c2.add("a");
		c2.add("b");
		c2.add("c");
		c2.add("d");
		
		//c1.addAll(c2);							//将c2中的每一个元素添加到c1中
		c1.add(c2);									//将c2看成一个对象添加到c1中
		System.out.println(c1);			//输出[a, b, c, d, [a, b, c, d]]
	}
2、第二个方法,boolean removeAll(Collection c) 删除交集,测试如下:
public static void main(String[] args) {

        Collection c1 = new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");
        c1.add("d");

        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("z");

        boolean b = c1.removeAll(c2);					//删除的是交集
        System.out.println(b);          //true
        System.out.println(c1);         //输出的是: [c, d]
    }
3、第三个方法,boolean containsAll(Collection c) 判断一个集合是否包含另外一个集合中的元素,测试如下:
public static void main(String[] args) {
        Collection c1 = new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");
        c1.add("d");

        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("z");

        boolean b = c1.containsAll(c2);				//判断调用的集合是否包含传入的集合
        System.out.println(b);         //false
    }
4、第四个方法,boolean retainAll(Collection c) 保留交集,测试如下:
public static void main(String[] args) {

        Collection c1 = new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");
        c1.add("d");

        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("c");
        c2.add("d");
        c2.add("e");
        c2.add("f");

        //取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
        boolean b = c1.retainAll(c2);					//取交集
        System.out.println(b);              //false
        System.out.println(c1);             //[a, b, c, d]
    }

四、集合的遍历之迭代器遍历

1、迭代简单例子,获取一个元素,hasNext():判断集合中是否有元素,next():获取第一位元素,每获取一位,指针向下挪动一位
public static void main(String[] args) {
        
        Collection c = new ArrayList();
        c.add("a");
        c.add("b");
        c.add("c");
        c.add("d");

        //对集合中的元素迭代(遍历)
        Iterator it = c.iterator();			//获取迭代器
		boolean b1 = it.hasNext();			//判断集合中是否有元素,有就返回true
		Object obj1 = it.next();            //获取第一位元素,每获取一位,指针向下挪动一位
		System.out.println(b1);             //true
		System.out.println(obj1);           //a

		boolean b2 = it.hasNext();			//判断集合中是否有元素,有就返回true
		Object obj2 = it.next();
		System.out.println(b2);             //true
		System.out.println(obj2);           //b
    }
2、while迭代循环遍历输出集合
public static void main(String[] args) {

        Collection c = new ArrayList();
        c.add("a");
        c.add("b");
        c.add("c");
        c.add("d");

        //对集合中的元素迭代(遍历)
        Iterator it = c.iterator();			//获取迭代器
        while(it.hasNext()) {
            System.out.println(it.next());		//共4行,输出4个元素
        }
    }
3、迭代一个自定义的类,用toString方法
public static void main(String[] args) {

        Collection c = new ArrayList();
        c.add(new Student("张三", 23));				//Object obj = new Student("张三",23);
        c.add(new Student("李四", 24));
        c.add(new Student("王五", 25));
        c.add(new Student("赵六", 26));

        //获取迭代器
        Iterator it = c.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());		//输出了上面添加的对象
        }
    }
4、迭代一个自定义的类,用get方法
 public static void main(String[] args) {

        Collection c = new ArrayList();
        c.add(new Student("张三", 23));				//Object obj = new Student("张三",23);
        c.add(new Student("李四", 24));
        c.add(new Student("王五", 25));
        c.add(new Student("赵六", 26));

        //获取迭代器
        Iterator it = c.iterator();
        while(it.hasNext()) {
            Student s = (Student)it.next();			//向下转型
            System.out.println(s.getName() + "..." + s.getAge());	//输出了上面添加的对象
        }
    }

五、(迭代器的原理及源码解析)(了解)

迭代器原理:
   迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可。

迭代器源码解析:
   * 1,在eclipse中ctrl + shift + t找到ArrayList类
   * 2,ctrl+o查找iterator()方法
   * 3,查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口
   * 4,查找Itr这个内部类,发现重写了Iterator中的所有抽象方法

————————
创作不易,如觉不错,随手点赞,关注,(* ̄︶ ̄),谢谢~~
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值