1、Map接口

1.1概述

        Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的有HashMap、TreeMap、HashTable等。

1.2常用方法

        put(K key,V value):添加元素
        remove(Object key):根据键删除键值对元素
        V get(Object key):根据键获取value值
        boolean containsKey(Object key):判断集合是否包含指定的键
        int size():集合长度
        Set keySet():获取所有键的集合

1.3案例

package com.hg.Map;

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

public class MapTest {
    public static void main(String[] args) {
        //泛型:k,v
        Map<Integer, String> map = new HashMap<>();

        //添加元素
        map.put(1,"仪玄");
        map.put(2,"星见雅");
        map.put(3,"叶瞬光");
        map.put(1,"虚狩-仪玄");

        //根据键获取value
        String s = map.get(3);
        System.out.println("map.get(3):" + s);

        //获取所有键的集合
        Set<Integer> keySet = map.keySet();
        for (Integer key : keySet) {
            System.out.println(key + "------" + map.get(key));
        }

        //集合长度
        System.out.println("map.size():" + map.size());

        //根据键值删除对应元素
        map.remove(1);
        System.out.println("删除后:" + map);

        //判断集合是否包含指定的键
        System.out.println("map.containsKey(1):" + map.containsKey(1));
    }
}

2、HashMap类

2.1概述

HashMap也是一个基于哈希表的集合,用于存储键值对;
底层原理:
存储:
        key.hashcode()%16计算存储位置;
        该位置有数据比较key的hashcode和equals,为true则替换,为false则存到末位
扩容机制:
        数组默认是16,超过0.75则扩容2倍
        链表元素个数>8并且数组.length>64,则该索引位置上的链表转为红黑树

HashMap中的重要常量:

数组的扩容:

2.2案例

package com.hg.Map.HashMap;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> map1 = new HashMap<>();
        map1.put("郭靖","黄蓉");
        map1.put("杨过","小龙女");
        map1.put("张三丰","郭襄");
        System.out.println("----------keySet------------");
        Set<String> keySet = map1.keySet();
        for (String key : keySet) {
            System.out.println(key + "==>" + map1.get(key));
        }

        Map<String, String> map2 = new HashMap<>();
        map2.put("萧峰","阿朱");
        map2.put("段誉","王语嫣");
        map2.put("虚竹","梦姑");
        System.out.println("----------增强for循环------------");
        Set<Map.Entry<String, String>> entrySet = map2.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            System.out.println(entry.getKey() + "==>" + entry.getValue());
        }

        Map<String, String> map3 = new HashMap<>();
        map3.put("令狐冲","任盈盈");
        map3.put("岳不群","宁中则");
        map3.put("林平之","岳灵珊");
        System.out.println("----------iterator------------");
        Set<Map.Entry<String, String>> entrySet1 = map3.entrySet();
        Iterator<Map.Entry<String, String>> iterator = entrySet1.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> entry = iterator.next();
            System.out.println(entry.getKey() + "==>" + entry.getValue());
        }

        Map<String, String> map4 = new HashMap<>();
        map4.put("陈平安","宁姚");
        map4.put("萧炎","萧熏儿");
        map4.put("林动","应欢欢");
        System.out.println("----------forEach------------");
        map4.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String key, String value) {
                System.out.println(key + "==>" + value);
            }
        });
    }
}

3、LinkedHashMap类

3.1概述

        LinkedHashMap是Map接口基于双向链表的实现,也是HashMap的子类。元素的存储和取出顺序是一致的。

HashMap中的内部类:Node

LinkedHashMap中的内部类:Entry

3.2案例

package com.hg.Map.HashMap.LinkedHashMap;

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

public class LinkedHashMapTest {
    public static void main(String[] args) {
        //Map<String, Integer> map = new HashMap<>();
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("yi",1);
        map.put("er",2);
        map.put("san",3);
        System.out.println("---------遍历---------");
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + "----" + entry.getValue());
        }

    }
}

4、TreeMap类

4.1概述

        TreeMap是Map接口基于红黑树的实现;默认对key进行自然排序;

4.2案例

    public class TestTreeMap{
        public static void main(String[]args){
            TreeMap<Integer,String> hm = new TreeMap<Integer,String>();
            hm.put(1,"CoreJava");
            hm.put(4,"web框架");
            hm.put(3,"JavaWeb");
            hm.put(2,"Java进阶");
            hm.put(5,"SpringBoot");
            Set<Integer> set = hm.keySet();
            for (Integer key:set){
                String value = hm.get(key);
                System.out.println(key+"---"+value);
            }
        }
    }

5、HashTable类

5.1概述

        Hashtable是个古老的Map实现类,JDK1.0就提供了,实现原理和HashMap相同;线程安全的、不可存储null的key和value。

5.2案例

package com.hg.Map.Hashtable;

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

public class HashtableTest {
    public static void main(String[] args) {
        //HashMap的key、value为null
        Map<String, String> hashMap = new HashMap<>();
        hashMap.put(null,"value");
        hashMap.put("key",null);
        hashMap.put(null,null);
        System.out.println(hashMap);

        //Hashtable的key、value为null
        Map<String,String> hashtable = new Hashtable<>();
        //hashtable.put(null,"value");
        //hashtable.put("key",null);
        //hashtable.put(null,null);
        hashtable.put("key","value");
        System.out.println(hashtable);
    }
}

6、Collections工具类

6.1概述

        java.util.Collections是操作集合的工具类,此类不能实例化,封装了各种有关集合操作的静态多态方法。

6.2常用方法

方法 说明

public static void sort(List list)

将指定的列表按升序排序
public static void reverse(List
list)
反转指定列表中元素的顺序
Object max(Collection) 返回给定集合中的最大元素
Object min(Collection) 返回给定集合中的最小元素
void copy(List dest,List src) 将src中的内容复制到dest

6.3案例

package com.hg.collections;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CollectionsTest {
    public static void main(String[] args) {
        List<Integer> src = new ArrayList<>();
        src.add(123);
        src.add(6);
        src.add(55);
        src.add(11);
        src.add(44);
        src.add(33);
        src.add(666);

        System.out.println("==============排序================");
        Collections.sort(src); //排序
        System.out.println(src);

        System.out.println("==============反转================");
        Collections.reverse(src); //反转
        System.out.println(src);

        System.out.println("==============最大值================");
        System.out.println(Collections.max(src)); //最大值

        System.out.println("==============最小值================");
        System.out.println(Collections.min(src)); //最小值

        System.out.println("==============拷贝================");
        List<Object> list = Arrays.asList(new Object[10]);
        System.out.println(list.size()); //10,不是真正的ArrayList

        //Collections.copy();该方法不好用,用以下代替
        List<Integer> dest = new ArrayList<>(src);
        System.out.println(dest);

        List<Integer> dest2 = new ArrayList<>();
        dest2.addAll(src);
        System.out.println(dest2);
    }
}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐