1. Map集合
1.1 概述
-
Interface Map<K,V> K:键的类型 V:值的类型
-
将键映射到值的对象:不能包含重复的键;每个键可以映射到最多一个值。
-
举例: 学生的学号和姓名
dejavu001 李 dejavu002 李淂加 dejavu003 得加呜
-
创建Map对象
1.使用多态的方式
2.具体实现类HashMap
3.Map集合的方法
方法名 描述 V put(K key, V value) 添加元素 v remover(Object key) 根据键值对的值删除元素 void clear() 移除所有键值对元素 boolean containsKey(Object key) 判断是否为指定的键 boolean containsValue(Object value) 判断是否为指定的值 boolean isEmpty() 判断集合是否为空 int Size() 集合的长度,也就是键值对数量
1.2 Map集合的获取方法
方法名 | 描述 |
---|---|
V get(Object key) | 根据键获取值 |
Set keySet() | 获取所有键集合 |
Collection values() | 获取所有值集合 |
1.3 Map集合的遍历
因为map集合是键值对组合,所以可以理解为map是一个夫妻对的集合。
1.3.1 遍历思路
- 把所有的丈夫都集中起来
- 遍历丈夫的集合,获取每一个丈夫
- 根据丈夫找到每一个妻子
1.3.2 Map集合中的操作
- 获取所有键的集合,用keySet() 方法实现
- 遍历键中的结合,用增强for循环实现
- 根据键寻找对应的值,用get方法实现
Demo
package Map集合;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo2 {
public static void main(String[] args) {
//创建 Map 集对象
Map<String, String> map = new HashMap<>();
//添加值
map.put("dejavu", "unknow");
map.put("litieliang", "liyamin");
map.put("lizhien", "beimu");
//获取所有键的集合,用keySet() 方法实现
Set<String> strings = map.keySet();
//遍历键中的结合,用增强for循环实现
//根据键寻找对应的值,用get方法实现
for (String string : strings) {
String s = map.get(string);
System.out.println(s);
}
}
}
1.3.3 遍历思路
- 获取所有结婚证的集合
- 遍历结婚证的集合,得到每一个结婚证
- 根据结婚证获取丈夫和妻子
1.3.4 Map集合中的操作
-
获取所有键值对对象的集合
Set<Map.Entry<K,V>> entrySet() : 获取所有键值对对象的集合
-
遍历键值对对象的集合,得到每一个键值对
用增强for实现,得到每一个Map.Entry
-
根据键值对对象获取对应的键和值
用getKey()得到键
用getValue()得到值
Demo
package Map集合;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class StudentMap {
public static void main(String[] args) {
Map<String,Student> stumap = new HashMap<>();
Student stu1 = new Student("dejavu",20);
Student stu2 = new Student("Key.L",27);
Student stu3 = new Student("Yee",25);
stumap.put("99",stu1);
stumap.put("92",stu2);
stumap.put("94",stu3);
//遍历方式1
Set<String> keySet = stumap.keySet();
for(String s: keySet){
Student student = stumap.get(s);
System.out.println("19"+s+": "+student.getName()+" "+student.getAge());
}
System.out.println("- - - - - - - -");
//遍历方式2
Set<Map.Entry<String, Student>> entrySet = stumap.entrySet();
for(Map.Entry<String, Student> entryy:entrySet){
String key = entryy.getKey();
Student value = entryy.getValue();
System.out.println(key+""+value.getName()+" "+value.getAge());
}
}
}
Demo:统计字符串中每个字符出现的次数
package Map集合;
import java.util.Collection;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
/*
输入字符串,计算字符出现的次数。
*/
public class count {
public static void main(String[] args) {
//键盘键入字符串
//创建hashMap集合
//遍历字符串,得到每一个字符
//拿得到的字符到hashMap中找对应的值,若是null则value值返回1
//反之value值加+
//按条件拼接
//输出结果
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String line = sc.nextLine();
HashMap<Character, Integer> hm = new HashMap<>();
for (int i = 0; i < line.length(); i++) {
char key = line.charAt(i);
Integer value = hm.get(key);
if(value == null){
hm.put(key,1);
}else{
value++;
hm.put(key,value);
}
}
StringBuilder sb = new StringBuilder();
Set<Character> keySet = hm.keySet();
for(Character key:keySet){
Integer value = hm.get(key);
sb.append(key).append("(").append(value).append(")");
}
String result = sb.toString();
System.out.println(result);
}
}
2. Collentions类
Collections是针对集合操作的工具类
2.1 常用方法
-
public static extends Comparable<? super T>> void sort<List list>
将指定列表按升序排列
-
public static void reverse(List<?> list)
反转指定列表中元素的顺序
-
public static void shuffle(List<?> list)
使用默认的随机源随机排列指定的列表
Demo:打扑克
package Map集合;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class POKERDEMOO {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<>();
ArrayList<Integer> arr = new ArrayList<>();
String[] colors = {"♠", "♥", "♣", "◆"};
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A","2"};
int index = 0;
for (String number : numbers) {
for (String color : colors) {
hm.put(index, color + number);
arr.add(index);
index++;
}
}
hm.put(index, "大王");
arr.add(index);
index++;
hm.put(index, "小王");
arr.add(index);
Collections.shuffle(arr);
TreeSet<Integer> player1 = new TreeSet<>();
TreeSet<Integer> player2 = new TreeSet<>();
TreeSet<Integer> player3 = new TreeSet<>();
TreeSet<Integer> dpoker = new TreeSet<>();
for (int i = 0; i < arr.size(); i++) {
int x = arr.get(i);
if (i >= arr.size() - 3) {
dpoker.add(x);
} else if (i % 3 == 0) {
player1.add(x);
} else if (i % 3 == 1) {
player2.add(x);
} else if (i % 3 == 2) {
player3.add(x);
}
}
lookpoker("dejavu", player1, hm);
lookpoker("lili", player2, hm);
lookpoker("li", player3, hm);
lookpoker("dpoker", dpoker, hm);
}
public static void lookpoker(String name, TreeSet<Integer> play, HashMap<Integer, String> hm) {
System.out.print(name + "的牌为:");
for (Integer i : play) {
String s = hm.get(i);
System.out.print(s);
}
System.out.println();
}
}