Java集合——相关基础、集合框架

本文深入讲解Java集合框架,包括集合类定义、特性、与数组的区别,以及Collection、List、Set、Map等接口的具体实现和应用案例,如ArrayList、LinkedList、HashSet、HashMap的使用方法。

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

一、什么是集合类
一种特殊的JAVA类,用来存储大批量数据的,
并且提供了很多方法,可以方便的对数据进行增删改查。
元素是以object(所有类的的父类)存储到集合中,
父类能出现的地方子类皆可出出现,
所以集合中可以存放任意数据类型的数据,并且集合的长度随意。

特点: 
	1)存放任意数据类型的数据
	2)变长,容量随数据的改变而改变

二、数组和集合的比较
1)数组是定长的,只能存放同类型数据。
2)集合是变长,可以存放任意数据类型的数据。

三、集合类接口
总共有两大接口:Collection 和Map ,一个元素集合,一个是键值对集合; 其中List和Set接口继承了Collection接口,一个是有序元素集合,一个是无序元素集合; 而ArrayList和 LinkedList 实现了List接口,HashSet实现了Set接口,这几个都比较常用; HashMap 和HashTable实现了Map接口,并且HashTable是线程安全的,但是HashMap性能更好;

   Collection接口:存储一组不唯一、无序的对象(可重复)
   List接口:存储一组不唯一、有序(插入顺序)的对象
			ArrayList类:
				底层是以数组的形式来存放数据的,查改速度快。
			LinkedList类:
				底层是以链表的形式来存放数据的,增删速度快。
				
				
		Set接口:存储一组唯一、无序的对象
			HashSet类
			TreetSet类
			
	Map接口:	
	Map:双列集合的根接口,用于存储具有键(key)、值(value)映射关系的元素。
	HashMap:用于存储键值映射关系,不能出现重复的键key
	TreeMap:用来存储键值映射关系,不能出现重复的键key,所有的键按照二叉树的方式排列

四、ArrayList类的应用
任何类都可以创建其对象

方法: 
	add(object o):在列表的末尾顺序添加元素,索引从0开始
	add(index,object):在指定位置处添加元素
	size():返回列表中元素的个数
	remove(indext):从列表中删除指定位置的元素,下标从0开始
	remove(object o):从列表中删除指定对象的元素
	get(int index):获取指定位置处的元素,取出的元素是object类型的
					使用之前需要进行强制类型转换
	contains(object o):判断列表中是否包含某个元素
	
	
		//1、创建多个小狗对象,都是object类型
		Dog ouou=new Dog("欧欧","金毛");
		Dog yaya=new Dog("亚亚","二哈");
		Dog meimei=new Dog("美美 ","金毛");
		Dog feifei = new Dog("菲菲","二哈");
		
		
		//2、创建ArrayList集合对象,并把多个小狗对象放入其中
		//声明父接口,创建子类
		List dogs=new ArrayList();
		dogs.add(ouou);
		dogs.add(yaya);
		dogs.add(meimei);
		dogs.add(2,feifei);
		
		//3、输出集合中小狗的数量
		System.out.println("共计有: "+dogs.size()+"条小狗");
		
		//4、通过遍历集合,显示各条狗的信息get()方法,强制类型转换
		for(int i=0;i<dogs.size();i++){
			Dog d=(Dog)dogs.get(i);
			System.out.println("小狗的名字:"+d.getName()+"\t小狗的类型:"+d.getStrain());
			
		}
		
		//5、删除集合中的第一个小狗和菲菲
		dogs.remove(0);
		dogs.remove(feifei);
		
		System.out.println("删除后,剩余的小狗:");
		for(int i=0;i<dogs.size();i++){
			Dog d=(Dog)dogs.get(i);
			System.out.println("小狗的名字:"+d.getName()+"\t小狗的类型:"+d.getStrain());
			
		}
		
		
		//6、判断集合中是否包含指定小狗信息
		if(dogs.contains(meimei)){
			System.out.println("集合中包含美美");
		}else{
			System.out.println("集合中不包含美美");
		}

五、LinkedList应用
写了很多自己的方法,增删快

LinkedList的特殊方法:
	addFirst(object o):在列表的首部添加元素
	addLast(object o):在列表的尾部添加元素
	getFirst():返回列表中的第一个元素
	getLast():返回列表中的最后一个元素
	removeFirst:删除列表中的第一个元素
	removeLast:删除列表中的最后一个元素
	
		//1、创建多个小狗对象,都是object类型
		Dog ouou=new Dog("欧欧","金毛");
		Dog yaya=new Dog("亚亚","二哈");
		Dog meimei=new Dog("美美 ","金毛");
		Dog feifei = new Dog("菲菲","二哈");
				
		//2、创建LinkedList集合对象,并把多个小狗对象放入其中
		LinkedList dogs =new LinkedList();
		dogs.add(ouou);
		dogs.add(yaya);
		
		//LinkedList独有的方法
		dogs.addFirst(meimei);
		dogs.addLast(feifei);
		
		//3、查看集合中第一个小狗的昵称
		Dog dogFirst=(Dog)dogs.getFirst();
		System.out.println("第一条小狗的昵称: "+dogFirst.getName());
		
		//4、查看最后一条小狗的昵称
		Dog dogLast=(Dog)dogs.getLast();
		System.out.println("最后一条小狗的昵称: "+dogLast.getName());
		
		//5、删除第一个和最后一个小狗
		dogs.removeFirst();
		dogs.removeLast();
		
		//6、显示删除后,剩余小狗的信息
		for(int i=0;i<dogs.size();i++){
			Dog d=(Dog)dogs.get(i);
			System.out.println(d.getName()+"\t"+d.getStrain());
		}

六、Set的应用
一般用HashSet实现类,存放唯一、无序的数据,
遍历时必须用迭代器Iterator。

Collection接口的iterator()方法返回一个Iterator对象,
	然后通过Iterator接口的两个方法实现遍历:
		1hasNext():判断是否有元素
		2next():取出元素

		Set set = new HashSet();
		set.add("one");
		set.add("two");
		set.add("three");
		set.add("four");
		
		//set存放唯一、无序的数据
		set.add("one");//并没有被插入进去
		System.out.println(set.size());
		
		//迭代器遍历Set集合
		Iterator it =set.iterator();
		while(it.hasNext()){//找到第一个元素,判断是否有元素
			System.out.println(it.next());//通过next方法,取出该元素
		}
		

七、Map接口应用
键值对存储数据
键:key
值:value

Map接口以键(key)值(value)对的方式存储数据;
	最常用的实现类是HashMap
	
	put(key,value):添加数据
	get(key):通过键来取相应的值
	remove(key):删除整个键值对
	size():获取集合的长度
	keySet():返回键的集合
	values():返回值得集合
	
		//1、使用HashMap存放多个国家英文简称和中文全品的键值对
		//声明父接口,创建实现类
		Map countries = new HashMap();
		
		countries.put("CN", "中华人民共和国");
		countries.put("RU", "俄罗斯联邦");
		countries.put("FR", "法兰西共和国");
		countries.put("US", "美利坚合众国");
		
		//2、显示CN对应的国家全拼,get()方法的参数是key
		String country = (String)countries.get("CN");
		System.out.println(country);
		
		//3、显示集合中元素的个数
		System.out.println("共有数据的个数为: "+countries.size());
		
		//4、判断Map中是否包含"FR"键,传一个键进去,返回true或false
		System.out.println("Map中包含FR键吗:"+countries.containsKey("FR"));
		
		//整个删除
		countries.remove("FR");
		System.out.println("Map中包含FR键吗:"+countries.containsKey("FR"));
		
		//6、分别显示键集、值集、键值对集合
		System.out.println(countries.keySet());
		System.out.println(countries.values());
		System.out.println(countries);

八、泛型
接口、类、迭代器后面都可以加泛型。
List dogs=new ArrayList ();
LinkedList dogs =new LinkedList ();
Iterator it =set.iterator ();
规定集合里面存的都是小狗类型
后面取值得时候,不用再强制类型转换了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值