day07 map

Map集合—双列集合
一、map集合的概述和特点
1.public interface Map<K,V>
*map是一个接口,创建对象的时候需要使用接口多态
*有两个泛型<K,V>,说明map集合是以"键值对"形式体现的,而且K和V之间是有"对应关系"的

	2.遍历map集合的注意事项
		map集合的最小单位是键值对,不能直接把K全部输出来,然后再把V输出来;因为这样就失去了K和V之间的对应关系

	3.map集合的特点
		key:
			(1)唯一
			(2)存取无序
		value:
			没有什么要求,是根据key来的

二、map集合的常用功能
	1.V put(K key,V value) 添加元素   //不是add
		*新增:当key在map集合中不存在的时候
		*修改:当key在map集合中已经存在的时候
		
	2.V remove(Object key) 根据键删除键值对元素
		//删除的是键值对
		
	3.void clear() 移除所有的键值对元素  //高危方法,基本不用
	
	4.boolean containsKey(Object key) 判断集合是否包含指定的键   //容易忘
	
	5.boolean containsValue(Object value) 判断集合是否包含指定的值//容易忘
	
	6.boolean isEmpty() 判断集合是否为空  //忘记
	7.int size() 集合的长度,也就是集合中键值对的个数
	
		//回忆
			* map集合怎么判空?
				if(null!=map && map.size()>0){
					xxxxx
				}

			*length、length()、size()三者的区别?
				length:数组的长度(属性)
				length():字符串的长度(方法)
				size():集合的长度(方法)
			
三、map集合的获取功能
	1.V get(Object key) 根据键获取值
		
	2.Set keySet() 获取所有"键"的集合
		//这里为什么返回的是set集合呀?
			因为key值的特点是唯一、存取无序,和set集合的特点一样,所以用set集合来接收
	
	3.Collection values() 获取所有"值"的集合
		//为什么返回值是Collection?
			map集合的value值是可以重复的,没有什么特殊要求,所以使用collection接收
		
	4.Set<Map.Entry<K,V>> entrySet() 获取所有键值对对象的集合
		//entry:条目、记录的意思,在这里指的是键值对信息的意思

四、map集合的两种遍历方式
	1.根据keyset来遍历
		步骤:
			*使用keySet()得到所有的key集合
			*使用增强for遍历得到每一个key
			*根据每一个key使用get(Object key)得到对应的value值
				代码实现:
				Set<String> keys = map.keySet();
				for (String key : keys){
					String value = map.get(key);
					System.out.println(key+"======="+value);
				}

	2.根据entryset来遍历
		步骤:
			*使用entrySet()得到所有的键值对对象的集合
			*使用增强for遍历每一个键值对对象
			*再使用没一个个键值对对象的getKey()和getValue()方法,得到每一个键和值
				代码实现:
					//根据entrySet来遍历
					Set<Map.Entry<String, String>> entries = map.entrySet();
					for (Map.Entry<String, String> me : entries){
						String key = me.getKey();
						String value = me.getValue();
						System.out.println(key+"======="+value);
					}

	//map集合的相关总结: ☆☆☆☆☆
		增:
			V put(K key,V value) 添加元素   //不是add
				//key值在map集合中不存在
		删:
			V remove(Object key) 根据键删除键值对元素
			
		改:
			V put(K key,V value) 添加元素
				//key值在map集合中已经存在
		
		遍历:有两种遍历方式
			*根据keySet方式遍历
			*根据entrySet的方式遍历
		
		判空:
			if(null!=map && map.size()>0){
				xxxxx
			}

		//关于map集合特点
			相对于key值来说的,key值必须是唯一的,并且它还是存取无序的
			
		//hashmap集合的key值是怎么保证唯一的
			和hashset集合保证唯一性的原理一样
				依赖于hashcode和equals两个方法
					(1)哈希表中不存在该哈希值
					直接将元素添加到哈希表中
				(2)哈希表中已经存在该哈希值
					使用equals方法和该哈希值下面"桶"中的数据逐一比较
						*发现里面有要添加的元素,覆盖
						*发现里面没有要添加的元素,在"桶"中继续添加该元素


五、案例分析
	1.map集合key是学生对象,value是string的案例
		//什么时候需要重写hashcode和equals方法?
			条件一:需要保证唯一的时候
			条件二:我们自定义的类
				*hashset集合存储自定义对象
				*linkedHashSet集合存储自定义对象
				*hashmap集合的key存储自定义对象

Collections的概述和使用
1.COllections是一个操作集合的工具类
//回忆
工具类要求:
*工具类所在的包,包名必须以util或者utils结尾
*工具类的类名必须以util或者utils结尾 //DateUtils
*构造方法私有
*所有的方法必须用static修饰

2.常用方法
	public static void sort(List list) 将指定的列表按升序排序  //自然排序
	public static void reverse(List<?> list) 反转指定列表中元素的顺序
		//字符串怎么反转?
			new StringBuilder("asdsfg").reverse().toString()
			
	public static void shuffle(List<?> list) 使用默认的随机源随机排列指定的列表
		//应用场景:洗牌、随机点名
	
3.Collections和Collection的区别?    //面试题
	*Collections是一个操作集合的工具类,常用的方法有排序、反转、随机的方法
	*Collection是单列集合的顶层接口,有两个子接口List和Set。
	
	
4.ArrayList集合存储学生对象并排序
	static <T> void sort​(List<T> list, Comparator<? super T> c) 
			//TreeSet​(Comparator<? super E> comparator) 构造一个新的,空的树集,根据指定的比较器进行排序。  
		Comparator:比较器排序接口,重写里面的compare方法。  //排序的规则
	

5.模拟斗地主案例
	(1)造54张牌
		*分为两种
			第一种:大王  小王   //字符串 
			第二种:A-2
				//定义花色数组
				String[] colors = {"♦", "♣", "♥", "♠"};
				//定义点数数组
				String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q", "K", "A"};
				for (String color : colors) {
				for (String number : numbers) {
				array.add(color + number);
					}
				}

	(2)洗牌
		Collections工具类的  void shuffle();
		
	(3)发牌
		分为四类
			第一个:三个玩家
				for (int i = 0; i < array.size(); i++) {
				String poker = array.get(i);
				if (i >= array.size() - 3) {
				dpArray.add(poker);
				} else if (i % 3 == 0) {
				lqxArray.add(poker);
				} else if (i % 3 == 1) {
				lyArray.add(poker);
				} else if (i % 3 == 2) {
				fqyArray.add(poker);
				}
				}
			第二个:底牌
				取最后三张牌作为底牌
					if (i >= array.size() - 3) {
						dpArray.add(poker);
					}

	(4)看牌
		遍历各自的ArrayList数组

	(5)都记住案例升级版
		问题:我们只对索引进行了自然排序,为什么对应的value也是从小到大的呢?
			String[] colors = {"♦", "♣", "♥", "♠"};
			String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q","K", "A", "2"};
			//从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号
			int index = 0;
			for (String number : numbers) {   //外层循环    数字
				for (String color : colors) {   //花色
					hm.put(index, color + number);
					array.add(index);
					index++;
				}
			}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值