刷题基础复习—Map

Map接口的实现类:HashMap(主要实现类)、LinkedHashMap、TreeMap

Map:添加Key-Value键值对

HashMap

1、Key使用Set存放,不可重复,Value使用Collection存放,可以重复,一个Key-Value是一个Entry,不可重复
2、添加元素,调用类的equals()方法,判断是否相同,相同元素靠后存储
3、常用方法:

@Test
    public void test1() {
        HashMap map = new HashMap();
        //1、Object put(Object key,Object value):添加元素
        map.put("AA", 213);
        map.put("BB", 456);
        map.put(444, "VV");
        map.put(null, null);
        map.put(new Person("AA", 23), 55);
        map.put(new Person("AA", 23), 56);
        //2、size()返回集合长度
        System.out.println(map.size());
        //3、Object remove(Object key):按照指定的key删除此key-value
        map.remove(444);
        //4、打印map
        System.out.println(map);
        //5、void putAll(Map t):向Map中添加另一个Map
        //6、void clear():清空
        //7、Object get(Object key):得到指定key的value
        System.out.println(map.get("AA"));
        //8、boolean containsKey(Object key)
        System.out.println(map.containsKey("AA"));
        //9、boolean containsValue(Object value):判断是否包含key/value,equals方法均要重写
        System.out.println(map.containsValue(213));
    }

Map是无序的,因此遍历结果与put元素顺序无关
Map是无序的,因此遍历结果与put元素顺序无关

4、刷题时遇到的其他方法:

        //10、分别得到Map的key、value集合以及Entry集合,每种集合类型与Map中对应类型相同
        //使用时可以添加泛型
        Set KeySet=map.keySet();
        Collection Values=map.values();
        Set EntrySet=map.entrySet();
        System.out.println(KeySet);
        System.out.println(Values);
        System.out.println(EntrySet);

在这里插入图片描述

LinkedHashMap

使用链表维护添加进Map中的顺序

@Test
    public void test3() {
        Map map = new LinkedHashMap();
        map.put("AA", 213);
        map.put("BB", 456);
        map.put(444, "VV");
        map.put(null, null);
        map.put(new Person("AA", 23), 55);
        System.out.println(map);
    }

在这里插入图片描述

TreeMap

1、按照添加进Map中的元素的Key的指定属性进行排序(定制排序),添加类(Person)需要实现equals和compareTo方法
2、实现Comparator接口类对象,并作为排序参数传入TreeMap构造器

@Test
    public void test5() {
        //TreeMap的定制排序
        Comparator com = new Comparator() {//抽象类实现接口
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Person1 && o2 instanceof Person1) {
                    Person1 p1 = (Person1) o1;
                    Person1 p2 = (Person1) o2;
                    int i = p1.getSex().compareTo(p2.getSex());
                    if (i == 0) {
                        return p1.getAge().compareTo(p2.getAge());
                    }
                    return i;
                }
                return 0;
            }
        };

        //将Comparator接口作为参数传递到TreeMap构造器
        Map map = new TreeMap(com);
        map.put(new Person1("AA", 23), 55);
        map.put(new Person1("CC", 44), 55);
        map.put(new Person1("ZZ", 255), 55);
        map.put(new Person1("DD", 32), 55);
        map.put(new Person1("GG", 11), 55);
        map.put(new Person1("MM", 15), 55);
        for (Object a : map.keySet()) {
            System.out.println(a + "=" + map.get(a));
        }

    }

按照Person中sex属性及age属性进行排序
按照Comparator接口实现对象中的排序方法进行排序

2、自然排序

添加类需要重写equals()方法及compareTo()方法,compareTo方法用于说明不同类对象间的比较
方法

Person类的compareTo方法:

@Override
    public int compareTo(Object o) {
        if(o instanceof Person){
            Person p=(Person)o;
            //return this.sex.compareTo(p.sex);
            int i=this.age.compareTo(p.age);
            if(i==0){
                return this.sex.compareTo(p.sex);
            }else{
                return i;
            }
        }
        return 0;
    }

TreeMap的自然排序:

 @Test
    //TreeMap的自然排序
    public void test4() {
        Map map = new TreeMap();
        map.put(new Person("AA", 23), 55);
        map.put(new Person("CC", 44), 55);
        map.put(new Person("ZZ", 255), 55);
        map.put(new Person("DD", 32), 55);
        map.put(new Person("GG", 11), 55);
        map.put(new Person("MM", 15), 55);
        for (Object a : map.keySet()) {
            System.out.println(a + "=" + map.get(a));
        }
    }

排序结果按照Person中conmareTo方法进行排序
排序结果按照Person中conmareTo方法进行排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值