容器

容器

容器|集合:
	存储多个引用数据类型的数据
	
	特点:
		
		1、容器长度可随数据个数进行增删
		2、容器可以存储任意类型的数据
		
		
		
Collection	容器的上层接口
	
	Collection子接口
		Set		无序不可重复
			HashSet(无序不可重复;无序--》存储的顺序和内部真实存放的顺序不同)
		
		List	有序可重复
		
			List容器的遍历:
			
				1、for 原因:存在索引
				2、for...each(增强for)
				3、迭代器Collection接口的功能,Collection接口的实现类都能够使用
					使用步骤:
						1)、获取迭代器对象(相当于工具)
						2)、判读是否存在下一个元素
						3)、获取
					公式:
						Iterator 变量名=容器对象.iterator();
						while(变量名.hasNext()){
							System.out.println(变量名.next());
						}
				4、列表迭代器,只有List容器能使用
					1)、获取列表迭代器listInterator();-->List接口的方法
					2)、判断是否有下一个|上一个元素
					3)、获取|添加数据
					
			ArrayList:是List的实现类,具有List接口的特点(线程不安全)
				
				底层结构:是由数组实现,通过数据拷贝实现的(可变数组,在内存中是一块连接的内存空间)
				优点:做查询、遍历,效率高
				缺点:做增删效率低
				应用场景:做大量查询推荐使用
				扩容问题:每次扩容原容量的1.5倍
		
Map 容器接口
	存储的每个数据都是K-V组成的
	K(键):无序,不可重复
	V(值):无序,可重复
	特点:
		Key和Value之间存在映射关系,根据key获取value值
		一个key只能对应一个value,想要对应多个,可以把value存放在容器中
		存储数据时,key相同,value的值会被覆盖
		
	遍历的方式:
		 1、keySet()获取所有的key,返回一个Set集合,然后根据key获取value值
		 2、values()获取所有的value值,返回一个Collection集合
		 3、entrySet()获取以K-V的数据,反回一个Set<Map.Entry<k的数据类型,v的数据类型>>的集合			 
		 eg:
			package com.shsxt.demo;

			import java.util.Collection;
			import java.util.HashMap;
			import java.util.Iterator;
			import java.util.Map;
			import java.util.Set;

			public class MapDemo {

				public static void main(String[] args) {
					// TODO Auto-generated method stub
					Map<Integer,String> map=new HashMap();
					//往map容器中添加数据
					map.put(01, "中国");
					map.put(02, "巴基斯坦");
					map.put(03, "俄罗斯");
					map.put(04, "日本");
					map.put(05, "英国");
					map.put(06, "美国");
					System.out.println(map);
					//遍历方式:
					System.out.println("----keySet()方式-----");
					Set<Integer> s=map.keySet();
					for(Integer i:s){
						System.out.println(map.get(i));
					}
					
					System.out.println("----Values方式-----");
					Collection<String> coll=map.values();
						Iterator m=coll.iterator();
						while(m.hasNext()){//判读是否存在下一个元素
							System.out.println(m.next());
						}
					
					System.out.println("---EntrySet()方式-----");
					Set<Map.Entry<Integer, String>> entry=map.entrySet();
					System.out.println(entry);
					Iterator<Map.Entry<Integer, String>> n=entry.iterator();
					while(n.hasNext()){//判读是否存在下一个元素
						Map.Entry<Integer, String> y=n.next();
						System.out.println(y);
					}

				}

			}
	
	HashMap:(线程不安全,效率高)
		
		底层:hash表实现(数组+链表+红黑树)
		
		如何解决HashMap线程不安全问题:
			1、可以使用Hashtable
			2、使用Collection提供的synchronizeMap方法,返回一个线程安全的Map
			3、juc包(高级并发编程包)下ConcurrentHashMap是一个线程安全的HashMap	推荐使用,效率高
	Hashtable:线程安全的哈希表,不能存储Null值	
	
泛型<>:严格要求定义容器中所有数据的类型<元素的类型>
	好处:帮助我们增强代码的可读性,扩展型、安全性;
	
	
Vector 向量
	与ArrayList像,都是由数组实现内部存储结构
	
	区别:
		早期jdk版本提供,后续jdk版本推荐ArrayList代替Vector
		Vector 线程安全,效率低,Arralist线程不安全,效率高
	扩容:每次扩容原容量的2倍,没有ArrayList节省空间
	
	LinkedList
		底层:双向链表
		优点:增删效率高
		缺点:查询效率低
		
链表:
	链表以结点作为存储单元,这些存储单元可以是不连续的
	
	单向链表:存储的数值+后序结点的指针
	
	双向链表:存储的数值+前序结点和后序结点的指针
	
	节点:由两部分组成:存储的数值+前序结点和后序结点的指针
	
Properties容器类
	Properties可保存在流中加载。属性列表中的每个键及其对应值都是一个字符串
	
TreeMap容器:
	根据key的值进行默认升序排序
	key值如果是自定义类型,需要手动对这个类型实现比较器,定义比较规则;
	
	Hash表(HashMap或HashSet):去重,根据key,需要对自定义的引用数据类型的数据重写hashcode和equals方法
	Tree树形结构(TreeMap,TreeSet):根据key去重排序,对引用数据类型的数据重写比较器(内部比较器,外部比较器)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值