集合-Collection

本文围绕Java的Collection集合展开,介绍了集合的由来,是为满足多个对象存储操作需求而设。对比了集合与数组在长度、内容、元素类型上的区别,还提及两种Collection集合遍历方式,并给出存储字符串和自定义对象并遍历的案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Collection

集合的由来?
我们学习的是Java–面向对象的语言–事物的描述–对象体现,
–多个对象–进行操作–存储 – 容器(数组和StringBuffer)
–StringBuffer返回结果是字符串–数组的长度固定–不适合做变化的需求,Java就提供了集合供我们使用。

(1)定义:Collection--是单列集合的顶层接口

1)属性

1)集合和数组的区别?
1-长度区别
数组固定
集合可变
2-内容区别
数组可以是基本类型,也可以是引用类型
集合只能是引用类型
3-元素内容
数组只能存储同一种类型
集合可以存储不同类型(其实集合一般存储的也是同一种类型)

  2)集合的继承体系结构
		由于需求不同,Java就提供了不同的集合类。
		这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,
		我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。
		数据结构:数据的存储方式
	
	Collection:是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的;
		|--List                 有序,可重复
		|--Set                  无序唯一
		|--Queue                队列
		|--BeanContext          
		|--BeanContextServices			
		
  3)Collection的功能概述:7个
	1-添加功能:boolean add(Object obj)--添加一个元素
	           boolean addAll(Collection c)--添加一个集合的元素
	2-删除功能:void clear()--移除所有的元素
	           boolean remove(Object o)--移除一个元素
			   boolean removeAll(Collection c)--移除一个集合的元素
	3-判断功能:boolean contains(Object o)--判断集合中是否包含指定的元素
	           boolean containsAll​(Collection<?> c)--判断集合中是否包含指定的集合元素(必须包含所有元素)
			   boolean isEmpty()--判断集合是否为空
	4-获取功能:Iterator<E> iterator()--迭代器,集合专用的遍历方式
	         Object next()方法--获取下一个元素
			 boolean hasNest()--如果仍有元素可以迭代,返回true
	5-长度功能:int size()--元素的个数
	
	6-交集(了解):boolean retainAll(Collection c)--仅保留此集合中包含在指定集合中的元素,两个集合都有的元素
		 特殊情况:list1和list2两个集合完全相同,所以list1和list2的交集就是他们本身,
		 把交集赋给list1时,list1没有发生任何的变化,所以返回false。
		 
		返回的boolean表示集合是否有改变
		假设A,B两个集合
		A对B做交集,最终结果保存在A中,B不变
		返回值表示的是A是否有改变
	
	7-集合转数组:Object[] toArray()
	  数组转集合:Arrays工具类的asList​(T... a)--返回由指定数组支持的固定大小的列表。
	      --注意:这个集合的长度不能改变。

2)注意:2种Collection集合遍历方式

  1)Collection集合的遍历
		 1-把集合转数组遍历(了解):Object[] toArray()
		 2-迭代器(集合专用方式):Iterator<E> iterator()
  2)迭代器
	1-是集合的获取元素的方式。
	2-是依赖于集合而存在的。
	3-迭代器的原理和源码。
		 1、迭代器为什么定义为了一个接口而不是实现类?
			集合类的数据结构是不同的,所以,存储和遍历的方式也是不同的。
			判断功能和获取功能应该是一个集合遍历所具备的。
		 2、那么真正的具体的实现类在哪里呢?
			在真正的具体子类中,以内部类的方式体现的
			如:在ArrayList中的内部类
			private class ListItr extends Itr implements ListIterator<E> {
         3、首先说一下迭代器模式,它是 Java 中常用的设计模式之一。
			用于顺序访问集合对象的元素,无需知道集合对象的底层实现。
		 4、Iterator 是可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现,从而解耦。
		 5、缺点是增加新的集合类需要对应增加新的迭代器类,迭代器类与集合类成对增加。
		 6、在迭代过程中调用集合的 remove(Object o)会报 java.util.ConcurrentModificationException 异常

案例:

A:存储字符串并遍历

		import java.util.Collection;
		import java.util.ArrayList;
		import java.util.Iterator;
		
		public class CollectionDemo {
			public static void main(String[] args) {
				//创建集合对象
				Collection c = new ArrayList();
				
				//创建并添加元素
				c.add("hello");
				c.add("world");
				c.add("java");
				
				//遍历集合
				Iterator it = c.iterator();//返回的是实现的子对象
				while(it.hasNext()) {
					String s =(String) it.next();
					System.out.println(s);
				}//多次调用next(),可能产生一个错误:NoSuchElementException
			}
		}

B:存储自定义对象并遍历

		public class Student {
			private String name;
			private int age;
			
			public Student(){}
			
			public Student(String name,int age) {
				this.name = name;
				this.age = age;
			}
			
			//getXxx()/setXxx()
		}
		
		import java.util.Collection;
		import java.util.ArrayList;
		import java.util.Iterator;
		
		public class StudentDemo {
			public static void main(String[] args) {
				//创建集合对象
				Collection c = new ArrayList();
				
				//创建学生对象
				Student s1 = new Student("林青霞",27);
				Student s2 = new Student("风清扬",30);
				Student s3 = new Student("刘意",30);
				Student s4 = new Student("武鑫",25);
				Student s5 = new Student("刘晓曲",16);
				
				//添加元素
				c.add(s1);
				c.add(s2);
				c.add(s3);
				c.add(s4);
				c.add(s5);
				
				//遍历集合
				Iterator it = c.iterator();
				while(it.hasNext()) {
					Student s = (Student)it.next();
					System.out.println(s.getName()+"---"+s.getAge());
				}
			}
		}

List

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值