Java Collection集合介绍

/*
 * 数据结构,容器:
 * 	 用来装对象....,等各种管理对象的容器。
 * 
 * 容器有相同的操作标准:
 * (1)增
 * (2)删
 * (3)改
 * (4)查
 * ...
 * 
 * Java给这些集合抽取两大接口:
 * 1、Collection:
 * 		规范单值集合的接口,obj   --》单身party
 * 2、Map
 * 		规范对值集合的接口,(key,value)  -->情侣party
 * 
 * 一、Collection
 * 1、Collection:接口
 * (1)它是根接口
 * (2)它没有直接的实现类,有更具体的子接口:List和Set...
 * (3)有一些的元素是可以重复的,有些集合的元素是不能重复,有些集合的元素是有序的,有些集合的元素是无序的
 * 
 * 2、API
 * (1)添加
 * add(Object obj):添加一个元素
 * addAll(Collection c):添加多个元素
 * (2)获取有效元素的个数
 * int size()
 * (3)是否包含
 * contains(Object o) :判断o是否在当前的集合中
 * containsAll(Collection c) :判断c是否是当前集合的子集
 * (4)boolean isEmpty()  :判断当前集合是否为空
 * 等价于   集合对象.size()==0
 * (5)remove(Object o):删除一个
 * removeAll(Collection c):删除多个      this = this - this ∩ c
 * clear():清空所有
 * 
 * (6)retainAll(Collection<?> c) :保留交集   this = this ∩ c
 * (7)Object[] toArray()  :把集合中的元素用一个数组返回
 */
public class TestCollection {
	@SuppressWarnings("all")
	@Test
	public void test9(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		Object[] all = c.toArray();
		System.out.println(Arrays.toString(all));
	}
	
	@SuppressWarnings("all")
	@Test
	public void test8(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		Collection c2 = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c2.add("张三");
		c2.add("杨洪强");
		
		c.retainAll(c2);
		System.out.println(c);
		System.out.println(c2);
	}
	
	@SuppressWarnings("all")
	@Test
	public void test7(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		Collection c2 = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c2.add("张三");
		c2.add("杨洪强");
		
		c.removeAll(c2);
		System.out.println(c);//说明ArrayList重写了toString
	}
	
	@SuppressWarnings("all")
	@Test
	public void test6(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		Collection c2 = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c2.add("张三");
		c2.add("李四");
		
		c.removeAll(c2);
		System.out.println(c);//说明ArrayList重写了toString
	}
	
	
	@SuppressWarnings("all")
	@Test
	public void test5(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		c.remove("张三");//删除一个
		System.out.println(c);//说明ArrayList重写了toString
	}
	
	@SuppressWarnings("all")
	@Test
	public void test4(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		Collection c2 = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c2.add("张三");
		c2.add("李四");
		
		Collection c3 = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c3.add("张三");
		c3.add("杨洪强");
		
		System.out.println(c.containsAll(c2));//c2是c的子集
		System.out.println(c.containsAll(c3));//c3不是c的子集
	}
	
	@SuppressWarnings("all")
	@Test
	public void test3(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		System.out.println(c.contains("张三"));
		System.out.println(c.contains("杨洪强"));
	}
	
	@SuppressWarnings("all")
	@Test
	public void test2(){
		/*
		 * 我这里左边写Collection,目的是只关注Collection
		 * 因为多态引用时,c编译期间只能访问Collection的方法
		 */
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add(1);
		c.add(2);
		c.add(3);
		
		Collection c2 = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c2.add("张三");
		c2.add("李四");
		c2.add("王五");
		
		c.addAll(c2);//把c2中的所有元素都添加到c集合中
//		c.add(c2);
		
		System.out.println("获取有效元素的个数:" + c.size());
		System.out.println(c);
	}
	
	
	@SuppressWarnings("all")
	@Test
	public void test1(){
		/*
		 * 我这里左边写Collection,目的是只关注Collection
		 * 因为多态引用时,c编译期间只能访问Collection的方法
		 */
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		System.out.println("获取有效元素的个数:" + c.size());
	}
}

Collection系列集合的遍历三种方式

/*
 * Collection系列的集合的遍历:挨个访问集合的元素
 * (1)Object[] toArray():先返回数组,然后遍历数组
 * (2)迭代器设计模式
 * 每一个Collection系列的集合,内部都自带一个迭代器,类似于,每一趟公交车上都有自己的售票员
 * 
 * java.util.Iterator:接口
 * 	 它是所有售票员的标准接口。
 *  (1)判断是否还有下一个元素:hasNext()
 *  (2)访问它的下一个元素:next()
 *  (3)请下一个元素下车:remove()
 *  
 *  java.util.Iterator:迭代器接口,这个接口的实现类在每一种集合类中,例如:ArrayList内部有一个内部类实现了Iterator接口
 *  这里声明为内部类有两个原因:
 *  (1)每一种集合的内部实现(物理结构不同),意味着对迭代器(售票员)的实现是不同的,每一种集合都要单独定制迭代器
 *  (2)内部类可以直接访问外部类的私有的属性,成员,迭代器就可以直接访问集合的私有的元素。
 *  
 *  (3)foreach:增强for循环
 *  foreach循环可以用于遍历数组、Collection系列的集合等容器。
 *  语法结构:
 *  for(元素的类型  元素临时名称  :  数组和集合名){
 *  
 *  }
 *  
 *  不同于普通for循环。
 *  for(int i=0; i<5; i++){
 *  }
 *  
 *  什么样集合或容器类型可以使用foreach循环?
 *  凡是实现了java.lang.Iterable接口(可迭代)的集合或容器都支持foreach循环
 *  
 *  foreach底层还是调用Iterator迭代器来遍历集合。
 */
public class TestIterator {
	@SuppressWarnings("all")
	@Test
	public void test5(){
		//我自己写的动态数组
		MyArrayList list = new MyArrayList();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		
		for (Object obj : list) {
			System.out.println(obj);
		}
	}
	
	@SuppressWarnings("all")
	@Test
	public void test4(){
		String[] arr = {"hello","world","java"};
		for (String string : arr) {
			System.out.println(string);
		}
	}
	
	@SuppressWarnings("all")
	@Test
	public void test3(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		//Object:元素的数据类型
		//obj:临时的元素名称
		//c:要遍历的集合的名称
		for (Object obj : c) {
			System.out.println(obj);
		}
	}
	
	@SuppressWarnings("all")
	@Test
	public void test2(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		//返回这个集合自带的迭代器对象,相当于你找到了售票员
		//让售票员去挨个的访问元素
		Iterator iterator = c.iterator();
		while(iterator.hasNext()){
			String obj = (String) iterator.next();
			//要姓“王”下车
			if(obj.startsWith("王")){
				iterator.remove();
			}
		}
		
		System.out.println(c);
	}
	
	
	@SuppressWarnings("all")
	@Test
	public void test1(){
		Collection c = new ArrayList();//ArrayList是Collection下面的一个实现类而已
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		//返回这个集合自带的迭代器对象,相当于你找到了售票员
		//让售票员去挨个的访问元素
		Iterator iterator = c.iterator();
		while(iterator.hasNext()){
			Object obj = iterator.next();
			System.out.println(obj);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值