JAVA容器-Map接口容器详解

JAVA容器系列专题

【JAVA容器概论】
【JAVA容器-List接口容器详解】
【JAVA容器-迭代器Iterator详解】
【JAVA容器-Set接口容器详解】
【JAVA容器-Map接口容器详解】
【JAVA容器演进及应用(含对Disruptor的浅解)】

Map接口容器关系图

在这里插入图片描述

Map接口常用方法

增加:put(K key, V value)
删除:clear() remove(Object key)
查看:entrySet() get(Object key) keySet() size() values()
判断:containsKey(Object key) containsValue(Object value) equals(Object o) isEmpty()

public class Test01 {
    //这是main方法,程序的入口
    public static void main(String[] args) {
        //创建一个Map集合:无序,唯一
        Map<String,Integer> map = new HashMap<>();
        System.out.println(map.put("lili", 10101010));
        map.put("nana",12345234);
        map.put("feifei",34563465);
        System.out.println(map.put("lili", 34565677));
        map.put("mingming",12323);
        /*map.clear();清空*/
        /*map.remove("feifei");移除*/
        System.out.println(map.size());
        System.out.println(map);
        System.out.println(map.containsKey("lili"));
        System.out.println(map.containsValue(12323));
        Map<String,Integer> map2 = new HashMap<>();
        System.out.println(map2.put("lili", 10101010));
        map2.put("nana",12345234);
        map2.put("feifei",34563465);
        System.out.println(map2.put("lili", 34565677));
        map2.put("mingming2",12323);
        System.out.println(map==map2);
        System.out.println(map.equals(map2));//equals进行了重写,比较的是集合中的值是否一致
        System.out.println("判断是否为空:"+map.isEmpty());
        System.out.println(map.get("nana"));
        System.out.println("-----------------------------------");
        //keySet()对集合中的key进行遍历查看:
        Set<String> set = map.keySet();
        for(String s:set){
            System.out.println(s);
        }
        System.out.println("-----------------------------------");
        //values()对集合中的value进行遍历查看:
        Collection<Integer> values = map.values();
        for(Integer i:values){
            System.out.println(i);
        }
        System.out.println("-----------------------------------");
        //get(Object key) keySet()
        Set<String> set2 = map.keySet();
        for(String s:set2){
            System.out.println(map.get(s));
        }
        System.out.println("-----------------------------------");
        //entrySet()
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for(Map.Entry<String, Integer> e:entries){
            System.out.println(e.getKey()+"----"+e.getValue());
        }
    }
}

TreeMap

  1. TreeMap类似TreeSet也需要实现排序接口,因为TreeMap是键值对,所以只能对TreeMap中的key进行排序。
  2. TreeMap的比较器也可以TreeSet相同,分为内部比较器和外部比较器两种。

HashMap

  1. key唯一,无序(通过hash算法计算要保存到底层数组的位置,所以存储无序)
  2. 底层的key使用的【哈希表+链表】实现,相同的key只能存在一个,但相同key后者的value会覆盖前者。
  3. 元素存入集合前会调用key类的hashCode()和equals()确定底层数组中的保存位置。

LinkedHashMap

  1. 实现了双线链表 ,有固定的顺序,与插入的顺序一样。
  2. HashMap+LinkedList,它使用HashMap操作数据结构,又使用LinkedList维护插入元素的先后顺序。

removeEldestEntry方法的介绍

可重写并根据逻辑删除最老的一个元素。

Demo展示:

public static void main(String[] args) {
    LinkedHashMap l = new LinkedHashMap(){
        @Override
        protected boolean removeEldestEntry(Map.Entry eldest) {
            return size() > 2;
        }
    };
    l.put("1","11");
    l.put("2","22");
    System.out.println(l);
    l.put("3","33");
    System.out.println(l);
}

返回数据:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值