Java双列集合Map

导读:本篇文章讲解 Java双列集合Map,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

一、Map

1、Map的常见API

2、map集合的三种遍历方式

3、HashMap

4、LinkedHashMap

5、TreeMap


一、Map

双列集合的特点

1、双列集合一次需要存一对数据,分别为键和值

2、键不能重复,值可以重复 1双列集合一次需要存一对数据,分别为键和值2键不能重复,值可以

重复

3、键和值是一一对应的,每一个键只能找到自己对应的值 3键和值是一一对应的,每一个键只能找到自己对应的值

4、键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象” 4键+值这个整体我们称之为“键值对”或者“键值对对象”,在中叫做“Entry对象”

1、Map的常见API

Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的

方法名称 说明
v put(k key,v value) 添加元素
v remove(object key) 根据键删除键值对元素
void clear() 移除所有的键值对元素
boolean containsKey(object key) 判断集合是否包含指定的键
boolean containsValue(object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中键值对的个数

示例:

        //创建map集合,
        Map<String,String> map = new HashMap();
        //添加元素
        map.put("张三","123");
        map.put("李四","456");
        map.put("王五","789");
        System.out.println(map);
        System.out.println("_________________");
        //根据键删除键值对元素
        map.remove("张三");
        System.out.println(map);
        //判断集合是否包含指定的键
        boolean flag = map.containsKey("张三");
        System.out.println(flag);
        //判断集合是否包含指定的值
        boolean b = map.containsValue("456");
        System.out.println(b);
        //判断集合是否为空
        boolean empty = map.isEmpty();
        System.out.println(empty);
        //集合的长度,也就是集合中键值对的个数
        int size = map.size();
        System.out.println(size);
        //移除所有的键值对元素
        map.clear();
        System.out.println(map);

2、map集合的三种遍历方式

1、键找值

示例:

        //创建map集合,
        Map<String,String> map = new HashMap();
        //添加元素
        map.put("张三","123");
        map.put("李四","456");
        map.put("王五","789");
        //获取所有的键放在单列集合里
        Set<String> stringSet = map.keySet();
        //遍历单列集合,得到每一个键
        for (String key : stringSet) {
            //通过键找到对应的值
            String value = map.get(key);
            System.out.println(key + "=" + value);
        }
        System.out.println("-------------");
        //通过迭代器遍历
        Iterator<String> iterator = stringSet.iterator();
        while (iterator.hasNext()){
            String key = iterator.next();
            String value = map.get(key);
            System.out.println(key + "=" + value);
        }
        System.out.println("-------------");
        //通过Lambda表达式遍历
        stringSet.forEach(s -> {
            //通过键找到对应的值
            String value = map.get(s);
            System.out.println(s + "=" + value);
        });

2、通过键值对

示例:

        //创建map集合,
        Map<String,String> map = new HashMap();
        //添加元素
        map.put("张三","123");
        map.put("李四","456");
        map.put("王五","789");
        //获取所有键值对放入一个集合
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //增强for遍历集合
        for (Map.Entry<String, String> entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "=" + value);
        }
        System.out.println("-----------------");
        //迭代器遍历
        Iterator<Map.Entry<String, String>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> next = iterator.next();
            System.out.println(next);
        }
        System.out.println("-----------------");
        //lambda表达式遍历
        entries.forEach(Entry -> {
            System.out.println(Entry);
        });

3、lambda表达式

示例:

      //创建map集合,
        Map<String,String> map = new HashMap();
        //添加元素
        map.put("张三","123");
        map.put("李四","456");
        map.put("王五","789");
        //匿名内部类
        map.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String s, String s2) {
                System.out.println(s + "=" + s2);
            }
        });
        System.out.println("_________________");
        //简化
        map.forEach((String key,String value)->{
            System.out.println(key + "=" + value);
        });
        //简化
        System.out.println("_________________");
        map.forEach((key,value)->System.out.println(key + "=" + value));

3、HashMap

HashMap的特点

1、HashMap是Map里面的一个实现类。

2、没有特有方法,直接使用Map里面的方法就可以了。

3、特点都是由键决定的:无序、不重复、无索引

4、HashMap跟HashSet底层原理是一模一样的,都是哈希表结构

5、HashMap底层是哈希表结构的

6、依赖hashcode方法和equals方法保证键的唯一

7、如果键存储的是自定义对象,需要重写hashCode和equals方法如果值存储自定义对象,不需要

重写hashCode和equals方法

HashMap练习,统计投票数

        //创建map集合,
        Map<String,Integer> map = new HashMap();
        //添加元素;定义四个景点
        List<String> list = new ArrayList<>();
        String [] array = {"A","B","C","D"};
        //定义票数
        Random random = new Random();
        for (int i = 0; i < 40; i++) {
            int index = random.nextInt(array.length);
            list.add(array[index]);
        }

        for (String name : list) {
            //判断当前景点是否在map集合中
            if (map.containsKey(name)){
                //存在
                //先获取当前经典的票数
                int count = map.get(name);
                //景点票数加1
                count++;
                //再放回集合中
                map.put(name,count);
            }else {
                //不存在
                map.put(name,1);
            }
        }
        //求最大值
        int max = 0;
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            int count = entry.getValue();
            if (count>max){
                max = count;
            }
        }
        //判断那个景点票数最多,并打印
        for (Map.Entry<String, Integer> entry : entries) {
            int count = entry.getValue();
            if (count == max){
                System.out.println(entry.getKey());
            }
        }
        System.out.println(map);

4、LinkedHashMap

由键决定:有序、不重复、无索引。

这里的有序指的是保证存储和取出的元素顺序一致

原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储

的顺序。

示例:

         //创建集合,
       LinkedHashMap<String,Integer> linkedHashMap = new LinkedHashMap<>();
       //添加元素
       linkedHashMap.put("a",1);
       linkedHashMap.put("a",2);
       linkedHashMap.put("c",3);
       linkedHashMap.put("d",4);
       //打印集合
       System.out.println(linkedHashMap);

5、TreeMap

TreeMap跟TreeSet底层原理一样,都是红黑树结构的。

由键决定特性:不重复、无索引、可排序

可排序:对键进行排序。

注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则

代码书写两种排序规则

1、实现Comparable接口,指定比较规则。

2、创建集合时传递Comparator比较器对象,指定比较规则。
示例:

     //创建集合,
       TreeMap<Integer,String> treeMap = new TreeMap<>(new Comparator<Integer>() {
           @Override
           public int compare(Integer o1, Integer o2) {
               //o1表示当前要添加的元素
               //o2表示已在红黑树存在的元素
               //实现倒序
               return o2-o1;
           }
       });
       //添加元素
       treeMap.put(5,"a");
       treeMap.put(4,"b");
       treeMap.put(3,"c");
       treeMap.put(2,"d");
       treeMap.put(1,"e");
       //打印
       System.out.println(treeMap);

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93336.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!