【Java_14】Map

2021-02-04 10:06:26 浏览数 (1)

一、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);
    }
}

0 人点赞