(三十三)、Map接口

Map接口概述

1、 实现Map接口的集合类用来存储“键-值”映射对。 //key value
2、 Map实现类中存储的“键-值”映射对是通过键来唯一标识,Map底层的“键”是用Set来存放的。
3、 映射Map每个元素含有两个部分:名称(key)和值(value)。其中key不得重复,所以它可以组成一个Set,而value部分可以重复可以组成一个List。
4、 如果将Key=Value看成一个复合对象,则Map变为了一个Set。
5、 常用的实现子类:
HashMap、LinkedHashMap
6、HashMap和TreeMap区别与HashSet与TreeSet的区别完全一致。

Map接口常用方法

Object put(Object key, Object value); //将指定的“键-值”对存入Map中
Object get(Object key);  //返回指定键所映射的值
Object remove(Object key); //根据指定的键把此“键-值”对从Map中移除。
boolean containsKey(Object key); //判断此Map是否包含指定键的“键-值”对。
boolean containsValue(Object value);  //判断此Map是否包含指定值的“键-值”对。
boolean isEmpty();  //判断此Map中是否有元素。
int size();  //获得些Map中“键-值”对的数量。
void clear();  //清空Map中的所有“键-值”对。
Set keySet();   //返回此Map中包含的键的Set集。
Collection values();  //返回此Map中包含的值的Collection集。

Map常用实现类

HashMap

使用频率最高的一种Map集合
HashMap内部对“键”用Set进行散列存放。所以根据“键”去取“值”的效率很高。

HashMapDemo.java

public class HashMapDemo {
    public static void main(String[] args) {
        // key 不能重复
        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "小明");
        map.put(2, "小黄");
        map.put(3, "小白");
        map.put(4, "小黄");// 一个value可以对应多个key

        // 返回所有values组成的collection集合
        Collection<String> values = map.values();
        for (String v : values) {
            System.out.println(v);
        }

        String oldvalue = map.put(1, "小黑");// 替换了旧的值,返回旧的值
        System.out.println(oldvalue);
        map.remove(1);// 移除
        // map.keySet();// 返回所有的key组成的set集合
        Set<Integer> keys = map.keySet();
        Iterator<Integer> iterator = keys.iterator();
        // 遍历key
        while (iterator.hasNext()) {
            int key = iterator.next();
            String value = map.get(key);// 返回key对应的value
            System.out.println(key + " " + value);
        }

    }
}

HashTable

HashTable用法与HastMap集合基本相同,只是HashTable是比较老的类集,是线程安全的,所以效率较低。 vector也是古老的

Properties是HashTable的一个子类,一般用于在从简单配置文件中读取数据的时候用到。学习IO时再学习此类。

LinkedHashMap

底层使用链表来记住了key的插入的顺序

Map.Entry

Map.Entry是Map中内部定义的一个接口,专门用来保存key-value的内容。
可以通过map集合的entrySet()方法来获得所有的Map.Entry组成的set集合。

Demo2.java

public class Demo2 {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("a", "aa");
        map.put("b", "bb");
        map.put("c", "cc");
        map.put("d", "dd");

        // 返回所有的键值对的Map.Entry 理解成结婚证
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for (Entry<String, String> entry : entrySet) {
            String key = entry.getKey();
            // entry.setValue("aaa");// 把当前的value更换成新的值
            String value = entry.getValue();
            System.out.println(key + " " + value);
        }

        System.out.println("-------------------------------");
        Iterator<Entry<String, String>> iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            Entry<String, String> next = iterator.next();
            String key = next.getKey();
            String value = next.getValue();
            System.out.println(key + " " + value);
        }
    }   
}

Collections

对List集合操作的工具类

Demo3.java

/*
 * 自然排序
 * 使用元素的compareTo方法进行排序
 */
public class Demo3 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(4);
        list.add(3);
        list.add(5);
        list.add(1);
        /*
         * Collections.sort(list); 
         * System.out.println(list); 
         * int index = Collections.binarySearch(list, 1);
         */

        Collections.sort(list, new MyComparetor());
        System.out.println(list);
    }

    //用来比较
    public static class MyComparetor implements Comparator<Integer> {

        @Override
        public int compare(Integer o1, Integer o2) {

            return o2 - o1;
        }
    }
}

Demo4.java

public class Demo4 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(2);
        list.add(4);
        list.add(3);
        list.add(5);
        list.add(1);
        // Collections.rotate(list, 1);// 轮转
        // Collections.shuffle(list);// 打乱,洗牌
        Collections.swap(list, 0, 1);// 交换顺序
        System.out.println(list);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值