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