30.Collection集合

Collection集合

1.Collection集合的基本功能测试
package heima_day15;

import java.util.ArrayList;
import java.util.Collection;

public class Demo2_collection {
	/**
		基本功能演示
		
		boolean add(E e)
		boolean remove(Object o)
		void clear()
		boolean contains(Object o)
		boolean isEmpty()
		int size()
		* B:注意:
		collectionXxx.java使用了未经检查或不安全的操作.
		注意:要了解详细信息,请使用 -Xlint:unchecked重新编译.
		java编译器认为该程序存在安全隐患
		温馨提示:这不是编译失败,所以先不用理会,等学了泛型你就知道了
	 	add方法如果是list集合一直返回true,因为list集合中可以存储重复的元素
	 	如果是set集合当中存储了重复的元素,就会返回false
	 	ArrayList 的父类的父类重写了toString的方法,所以在打印对象的引用的时候,输出的结果不是Object类中的toString的结果
	 */
	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);	
		System.out.println(b1);
		System.out.println(b2);
		System.out.println(b3);//全都只返回true,因为colletion作为最底层,需要考虑list和set的运用
		System.out.println(c);
		System.out.println("------------");
		c.remove(true);//删除指定元素
		System.out.println(c);
		System.out.println("------------");
		c.clear();//清空集合
		System.out.println(c);
		System.out.println("------------");	
		System.out.println(c.contains("a"));//判断是否包含“a”
		System.out.println(c.isEmpty());//判断是否为空
		System.out.println("------------");	
		c.add("aaa");
		System.out.println(c.size());//获取元素的个数
	}

}

2.集合的遍历之集合转数组遍历
import java.util.ArrayList;
import java.util.Collection;

import com.heima.bean.Student;

public class Demo3_collection {
	/**
	 * A:集合的遍历
	 	* 其实就是依次获取集合中的每一个元素。
	 	* B:案例演示
	 	* 把集合转成数组,可以实现集合的遍历
	 	* toArray()
	 */
	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]);
		}
		
		Collection coll = new ArrayList();
		coll.add(new Student("张三",23));		//Object obj = new Student("张三",23);
		coll.add(new Student("李四",24));
		coll.add(new Student("王五",25));
		coll.add(new Student("赵六",26));
		
		Object[] arr2 = coll.toArray();				//将集合转换成数组
		for (int i = 0; i < arr.length; i++) {
			Student s = (Student)arr2[i];			//向下转型,强转成Student
			System.out.println(s.getName() + "," + s.getAge());
		}

	}

}

3.Collection集合的其他功能测试

All功能测试
boolean addAll(Collection c)
c1.addAll(c2); //将c2的全部元素逐个添加到c1中
c1.add(c2);//将c2的全部元素全部添加到c1的一个元素中
boolean removeAll(Collection c)//删除的是交集
boolean containsAll(Collection c)//判断调用的集合是否包含传入的集合
boolean retainAll(Collection c)//取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
例:c1 abcd c2 abc 交集 abc;abc对于c1的abcd改变了,返回true

Collection存储自定义对象并遍历
Collection c = new ArrayList();
c.add(new Student(“张三”,23));
c.add(new Student(“李四”,24));
c.add(new Student(“王五”,25));
c.add(new Student(“赵六”,26));
c.add(new Student(“赵六”,26));
for(Iterator it = c.iterator();it.hasNext(); {
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + “,” + s.getAge()); //获取对象中的姓名和年龄
}
System.out.println("------------------------------");
Iterator it = c.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
//System.out.println(((Student)(it.next())).getName() + “,” +
((Student)(it.next())).getAge());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + “,” + s.getAge()); //获取对象中的姓名和年龄
}

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

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

  • C:三种迭代的能否删除
    普通for循环,可以删除,但是索引要i–(移动索引的位置)
    迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
    增强for循环不能删除


import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo5_Iterator {
	/**
	 * A:迭代器概述
	 * 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历) 
	 */
	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);
		System.out.println(obj1);
		
		boolean b2 = it.hasNext();//判断集合中是否有元素,有就返回true
		Object obj2 = it.next();
		System.out.println(b2);
		System.out.println(obj2);//指针向后移动了*/
		
		Iterator it = c.iterator();	
		while (it.hasNext()) {
			System.out.println(it.next());
		}
		
		
	}

}
5.Collections
import java.util.ArrayList;
import java.util.Collections;

public class Demo9_Collections {
	/**
	 * A:Collections类概述
	* 针对集合操作 的工具类
	* B:Collections成员方法
	* 
		public static <T> void sort(List<T> list)
		public static <T> int binarySearch(List<?> list,T key)
		public static <T> T max(Collection<?> coll)
		public static void reverse(List<?> list)
		public static void shuffle(List<?> list)
	 * @param args
	 */
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		list.add("a");
		list.add("b");
		list.add("d");
		list.add("a");
		list.add("c");
		list.add("b");
		System.out.println(list);
		Collections.sort(list);//将集合排序
		System.out.println(list);
		System.out.println(Collections.binarySearch(list, "b"));//二分查找法
		System.out.println(Collections.max(list));//获取最大值
		Collections.reverse(list);//反转集合	
		System.out.println(list);
		Collections.shuffle(list);//随机排序
		System.out.println(list);
		
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值