Java中Map集合的学习

Map

1.HashMap的特点
具备哈希特性:针对键,键唯一,无索引,无序
要求:键所属的类,覆盖重写hashCode和equals方法

2.LinkedHashMap的特点
具备哈希特性和链表特性,针对键
哈希特性:唯一,无索引
链表特性:有序
要求:键所属的类,覆盖重写hashCode和equals方法

3.Map的常用方法
public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的
值。
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
public Set keySet() : 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
public boolean containKey(Object key) :判断该集合中是否有此键。

package map;

/*
    java.util.Map<K,V>接口
        双列集合的根接口,里面定义的方法,子接口/实现类都有
        K: 键的类型     键 唯一
        V: 值的类型     值 可重复
        特点:
            1.键 唯一,值 可重复
            2.一个键对应一个值(一一对应关系,称为映射关系/键值对)
            3.通过键维护映射关系(只能通过键获取值,不能通过值获取键)

    常用实现类

        java.util.HashMap<K,V>集合
            特点:
                1.具备哈希特性: 针对键,键唯一,无索引,无序
                2.希特性: 唯一,无索引,无序
                3.要求: 键所属的类,覆盖重写hashCode方法和equals方法

        java.util.LinkedHashMap<K,V>集合
            特点:
                1.具备哈希特性+链表特性: 针对键
                2.哈希特性: 唯一,无索引
                3.链表特性: 有序
                3.要求: 键所属的类,覆盖重写hashCode方法和equals方法
    常用方法:
        - public V put(K key, V value):  把指定的键与指定的值添加到Map集合中。
            第一次存储该键: 返回 null
            已经存储过该键: 返回的被替换的值
            键重复,值替换

        - public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
        - public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
        - public boolean containKey(Object key):判断该集合中是否有此键。
        - public boolean containValue(Object value):判断该集合中是否有此值。
 */

import java.util.HashMap;
import java.util.Map;

public class Demo01 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        String v = map.put("张三","李四");
        map.put("王五","赵六");
        map.put("张合","高览");

        v = map.put("张三","曹操");

        //System.out.println(map.get("张三"));

        String s = map.remove("张三");
        //System.out.println(s);

        System.out.println(map);
    }
}

4.Map集合获取所有的键和值

package map;

/*
    Map集合的获取所有的键和值的功能
        public Set<K> keySet(): 获取Map集合中所有的键组成的Set集合
        public Collection<V> values(): 获取Map集合中所有的值组成的Collection集合
*/

import java.util.*;

public class Demo02 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("韩鹏","李金羽");
        map.put("曹操","曹丕");
        map.put("陆逊","孙权");

        Set<String> s = map.keySet();
        Iterator<String> it = s.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }

        Collection<String> v = map.values();
        Iterator<String> i = v.iterator();
        while (i.hasNext()){
            System.out.println(i);
        }

    }
}

5.Map集合的遍历
方式一:
通过键找到值

package map;

import java.util.HashMap;
import java.util.Map;

public class Demo03 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("邓超","孙俪");
        map.put("李晨","范冰冰");
        map.put("刘德华","柳岩");

        for (String s:map.keySet()) {
            System.out.println(s+":"+map.get(s));
        }
    }
}

方式二:
通过键值对的方式
在这里插入图片描述

package map;

import java.util.HashMap;
import java.util.Map;

public class Demo04 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        map.put("文章","马伊琍");
        map.put("刘德华","柳岩");
        map.put("范冰冰","李晨");

        for (Map.Entry<String,String> entry:map.entrySet()) {
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }
}

6.用Map集合统计字符个数

package map;

import java.util.HashMap;
import java.util.Map;

public class Demo05 {
    public static void main(String[] args) {
        String str = "aacbdeeffabc";

        Map<Character,Integer> map = new HashMap<>();

        for (int i = 0; i < str.length() ; i++) {
            char ch = str.charAt(i);
            if (map.containsKey(ch)) {
                int num = map.get(ch);
                map.put(ch, ++num);
            } else {
                map.put(ch, 1);
            }
        }
        System.out.println(map);
    }
}

7.斗地主案例

package doudizhu;

import org.w3c.dom.ls.LSOutput;

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        //1.存储扑克牌,花色和数字
        Map<Integer,String> map = new HashMap<>();
        List<String> colors = new ArrayList<>();
        List<String> nums = new ArrayList<>();
        Collections.addAll(colors,"♠","♥","♣","♦");
        Collections.addAll(nums,"3-4-5-6-7-8-9-10-J-Q-K-A-2".split("-"));

        int index = 0;//牌的索引
        //2.拼接花色和数字
        for (int i = 0; i < nums.size() ; i++) {
            for (int j = 0; j < colors.size() ; j++) {
                String pocks = nums.get(i) + colors.get(j);

                map.put(index++,pocks);
            }
        }

        map.put(index++,"大王");
        map.put(index,"小王");

        //3.打乱顺序,洗牌
        Set<Integer> set = map.keySet();
        ArrayList<Integer> list = new ArrayList<>(set);
        Collections.shuffle(list);

        //4.发牌
        ArrayList<Integer> p1 = new ArrayList<>();
        ArrayList<Integer> p2 = new ArrayList<>();
        ArrayList<Integer> p3 = new ArrayList<>();
        ArrayList<Integer> dipai = new ArrayList<>();

        for (int i = 0; i < list.size() ; i++) {
            if(i > 50){
                dipai.add(i);
            }else {
                if (i % 3 == 0){
                    p1.add(i);
                }else if (i % 2 == 0){
                    p2.add(i);
                }else {
                    p3.add(i);
                }
            }
        }

        lookPai("张三",p1,map);
        lookPai("李四",p1,map);
        lookPai("王五",p1,map);

    }

    //看牌
    public static void lookPai(String name,List<Integer> list,Map<Integer,String> map ){
        System.out.println(name + "的牌是");
        for (int a :list) {
            String b = map.get(a);
            System.out.println(b + ",");
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值