一、Map
1. Map集合介绍
代码语言:javascript
复制* Map集合是双列集合,键、值成对存在,其中键不能重复,值可以重复。
2. Map中的常用方法
代码语言:javascript
复制① put(K key, V value)
把指定的键与指定的值添加到Map集合中。
② remove(Object key
把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
③ get(Object key)
根据指定的键,在Map集合中获取对应的值。
④ containsKey(Object key)
判断集合中是否包含指定的键。
⑤ keySet()
获取Map集合中所有的键,存储到Set集合中。
⑥ Set<Map.Entry<K,V>> entrySet
获取到Map集合中所有的键值对对象的集合(Set集合)。
3. Map的遍历
代码语言:javascript
复制① keySet()
示例:
//获取map中国所有的键存入set集合中
Set<String> keys = map.keySet();
//遍历set集合,通过get方法遍历map集合
for (String key : keys) {
String value = map.get(key);
System.out.println(key "t:t" value);
}
② entrySet()
示例:
//获取entry对象,存入set中
Set<Map.Entry<String, String>> entries = map.entrySet();
//遍历set,通过获取entry的key和value的值遍历map
for (Map.Entry<String, String> entry : entries) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key "t:t" value);
}
4. HashMap<K,V>
代码语言:javascript
复制* 存储数据采用的哈希表结构,元素的存取顺序不能保证一致。
* 由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
5. LinkedHashMap<K,V>
代码语言:javascript
复制* HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构 链表结构。
* 通过链表结构可以保证元素的存取顺序一致;
* 通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
6. 示例
代码语言:javascript
复制import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class DemoMap {
public static void main(String[] args) {
//创建map集合
HashMap<String,String> map = new HashMap<>();
//添加键值对
map.put("海思","华为");
map.put("中国芯","华为");
map.put("酷睿","英特");
//修改键值对
map.put("海思","中国芯");
//打印map集合大小
System.out.println(map "→" map.size());
System.out.println("====================");
//获取 “海思” 对应的值
System.out.println(map.get("海思"));
//移除 “酷睿” 所对应的键值对
map.remove("酷睿");
System.out.println(map "→" map.size());
System.out.println("====================");
//查看map集合中是否包含 “海思” 键
System.out.println(map.containsKey("海思"));
//查看map集合中是否包含 “华为” 值
System.out.println(map.containsValue("华为"));
System.out.println("====================");
//获取map中国所有的键存入set集合中
Set<String> keys = map.keySet();
//遍历set集合,通过get方法遍历map集合
for (String key : keys) {
String value = map.get(key);
System.out.println(key "t:t" value);
}
System.out.println("====================");
//获取entry对象,存入set中
Set<Map.Entry<String, String>> entries = map.entrySet();
//遍历set,通过获取entry的key和value的值遍历map
for (Map.Entry<String, String> entry : entries) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key "t:t" value);
//设置entry的value的值
entry.setValue(value "&大中华");
String key1 = entry.getKey();
String value1 = entry.getValue();
System.out.println(key1 "t:t" value1);
}
}
}
二、JDK9 集合的优化
1. 示例
代码语言:javascript
复制Map<Integer,String> map1 = Map.of(1930,"乌拉圭",1934,"意大利",1938,"意大利",
1950,"乌拉圭",1954,"西德",1958,"巴西",1962,"巴西",1966,"英格兰");
2. 注意
代码语言:javascript
复制① of( 参数列表 )方法只有List、Set、Map可以使用,子类不可使用。
② 在List中 of( 参数列表 ) 的参数是可变参数,在其他集合接口中只能存放10个
③ 返回的集合是不可修改的。
三、斗地主例题
代码语言:javascript
复制import java.util.*;
public class DemoSquence {
public static void main(String[] args) {
//1. 创建花色集合
List<String> list1 = List.of("♠", "♥", "♣", "♦");
//2. 创建数字集合
List<String> list2 = List.of("3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2");
//3.1 创建牌盒
LinkedHashMap<Integer,String> map = new LinkedHashMap<>();
//3.2 放牌,使牌在集合中的键越大代表牌越大
int i = 1;
for (String s2 : list2) {
for (String s1 : list1) {
map.put(i,s1 s2);
i ;
}
}
map.put(53,"小王");
map.put(54,"大王");
//4. 洗牌
//4.1 将key放入List集合
Set<Integer> set = map.keySet();
ArrayList<Integer> list = new ArrayList<>();
for (Integer integer : set) {
list.add(integer);
}
//4.2 打乱key
Collections.shuffle(list);
//5.1 创建玩家
TreeSet<Integer> play1 = new TreeSet<>();
TreeSet<Integer> play2 = new TreeSet<>();
TreeSet<Integer> play3 = new TreeSet<>();
//5.2 创建底牌
TreeSet<Integer> dp = new TreeSet<>();
//5.3 发牌,使用TreeSet集合自动将键排序
int j = 1;
for (Integer it : list) {
if (j > 51) {
dp.add(it);
}
if (1 == j % 3){
play1.add(it);
} else if (2 == j % 3){
play2.add(it);
} else {
play3.add(it);
}
j ;
}
//5.4 调用look方法看牌
look(play1,map);
look(play2,map);
look(play3,map);
look(dp,map);
}
public static void look(TreeSet<Integer> set,LinkedHashMap<Integer,String> map) {
//创建ArrayList集合
ArrayList<String> list = new ArrayList<>();
//通过键获取值,存入ArrayList
for (Integer integer : set) {
list.add(map.get(integer));
}
System.out.println(list);
}
}