Map集合

Map:

(1)什么是Map:

	将键映射到值得对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

(2)Map和Collection的区别?

	A:Map存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
	B:Collection存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可以重复。光棍

(3)Map接口功能概述

	A:添加功能put(K key, V value) 
	B:删除功能remove(Object key) 
	C:判断功能isEmpty() 如果此映射未包含键-值映射关系,则返回 true。
			  containsKey(Object key)如果此映射包含指定键的映射关系,则返回 true。
			  containsValue(Object value)  如果此映射将一个或多个键映射到指定值,则返回 true。
	D:获取功能get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
	E:长度功能size() 返回此映射中的键-值映射关系数。

(4)Map集合的遍历

	A:键找值
		a:获得所有键的集合
		b:遍历键的集合,得到每一个键
		C:根据键到集合中去找值
	B:键值对对象找键和值
		a: 获取所有的键值对对象的集合
		b:遍历键值对对象的集合,获取每一个键值对对象
		C:根据键值对对象获取键和值

方式一
方式二
(5)HashMap集合

	HashMap类概述:键是哈希表结构,可以保证键的唯一性,不保证Map的迭代顺序。(输入输出顺序不一定相同)

(6)TreeMap集合

	TreeMap类概述:键是红黑树结构,可以保证键的排序(自然排序或者按给定的Comparable排序)和唯一性。

(7)LinkedHashMap集合

	Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。哈希表保持键唯一,链表保持集合有序(输入顺序与存储顺序相同)

(8)Hashtable与HashMap的区别

Hashtable:线程安全,效率低,不允许null键和null值
HashMap:线程不安全,效率高,允许null键和null值

(9)案例

	A:统计一个字符串中每个字符出现的次数
import java.util.Scanner;
import java.util.Set;
/*
 * 需求: "aabccbbadde",获取字符中每个字母出现的次数要求结果:a(3) b(3) c(2) d(2) e(1)
 * 
 * 
 * 分析: 
 * 			A:定义一个字符串
 * 			B:定义一个TreeMap集合
 * 				键:Character
 * 				值:Integer
 * 
 * 			C:把字符串转换为字符数组
 * 			D:遍历字符数组,得到每一个字符
 *  		E:把刚才得到的字符作为键到集合中去找值,看返回值
 *  			是null:说明键不存在,把该字符作为键,1作为值
 *  			不是null: 说明键存在,就把值加1,然后重写键值对
 *  		F:定义字符串缓冲区
 *  		G:遍历集合,得到键和值,然后拼接
 *  		H:把字符串缓冲区转换为字符串进行输出
 * 
 */
import java.util.TreeMap;

public class TreeMapDemo {
	public static void main(String[] args) {
		//定义一个字符串
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入字符串");
		String s = sc.nextLine();
		
		//定义一个TreeMap集合
		TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
		
		//把字符串转换为字符数组
		char[] ch = s.toCharArray();
		
		//遍历字符数组,得到每一个字符
		for(char c : ch){
			//把得到的每一个字符作为键到集合中去找值,看返回值
			Integer i = tm.get(c);
			
			//是null:说明键不存在,把该字符作为键,1作为值
			if(i == null){
				tm.put(c, 1);
			}
			else{
				tm.put(c, ++i);//先做加法运算,然后在用于重写键值对
			}
			//不是null: 说明键存在,就把值加1,然后重写键值对
		}
		//定义字符串缓冲区
		StringBuffer sb = new StringBuffer();
		
		//遍历集合,得到键和值,然后拼接
		
		Set<Character> key = tm.keySet();
		for(Character c : key){
			Integer i = tm.get(c);
			sb.append(c).append("(").append(i).append(")").append(" ");
		}
		//把字符串缓冲区转换为字符串进行输出
		String resurt = sb.toString();
		System.out.println("resurt: "+resurt);
	}
}

	B:集合的嵌套遍历
	a:HashMap嵌套HashMap
	b:HashMap嵌套ArrayList
	c:ArrayList嵌套HashMap
	d:HashMap嵌套HashMap嵌套HashMap(三层嵌套)

2:Collections

(1)是针对集合进行操作的工具类
(2)面试题:

	Collection和Collections的区别
	A:Collection是单列集合的顶层接口,有两个子接口List和Set
	B: Collections是针对集合进行操作的工具类,可以对集合进行排序和查找等

(3)常见的几个小方法:

public static <T> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。
public static <T> int binarySearch(List<?> list,T key) 使用二分搜索法搜索指定列表,以获得指定对象。
public static <T> T max(Collection<?> coll)  根据元素的自然顺序,返回给定 collection 的最大元素。
public static void reverse(List<?> list)  反转指定列表中元素的顺序。
public static void shuffle(List<?> list)  使用默认随机源对指定列表进行置换。

(4)案例

模拟斗地主洗牌发牌(ArrayList集合实现)
模拟斗地主洗牌和发牌并对牌进行排序(HashMap,ArrayList,TreeSet)代码见18-itcast_07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值