Map(严格来说是一个容器不是一个集合)

                                                          1.Map概述

A:Map接口概述

查看API可以知道:

将键映射到值的对象

一个映射不能包含重复的键

每个键最多只能映射到一个值

简而言之,一个key值对应着一个value,多个value可以对应着一个key


B:Map接口和Collection接口的不同

Map是双列的,Collection是单列的

Map的键唯一,Collection的子体系Set是唯一的

Map集合的数据结构指针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

                                                          2.Map的CRUD

A:Map集合的功能概述

a:添加功能

V put(K key,V value):添加元素。

如果键是第一次存储,就直接存储元素,返回null

如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis"); }

b:删除功能

void clear():移除所有的键值对元素

V remove(Object key):根据键删除键值对元素,并把值返回

```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");

    map.clear();

    String string = map.remove("13");

}

```

c:判断功能

boolean containsKey(Object key):判断容器是否包含指定的键

boolean containsValue(Object value):判断容器是否包含指定的值

boolean isEmpty():判断容器是否为空

```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");

    boolean key = map.containsKey("13");

    boolean value = map.containsValue("lisi");

    System.out.println(key);

    System.out.println(value);

}

```

d:获取功能

Set<Map.Entry<K,V>> entrySet():

```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");

    Set<Entry<String,String>> set = map.entrySet();

    for (Entry<String, String> entry : set) {

        System.out.println(entry.getKey() + ":" + entry.getValue());

    }

} ```

V get(Object key):根据键获取值

java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis"); String string = map.get("123"); System.out.println(string); }


Set keySet():获取容器中所有键的容器

```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");

    Set<String> set = map.keySet();

    for (String string : set) {

        map.get(string);

    }

} ```

Collection values():获取容器中所有值的容器

```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");

    Collection<String> values = map.values();

}

```

e:长度功能

int size():返回容器中的键值对的个数

3.Map集合的遍历之键找值

A:键找值思路:

获取所有键的容器

遍历键的容器,获取到每一个键

根据键找值

B:案例演示

Map集合的遍历之键找值

```java

public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");

    Set<String> set = map.keySet();

    for (String string : set) {

        map.get(string);

    }

}

```

4.Map集合的遍历之键值对对象找键和值

A:键值对对象找键和值思路:

获取所有键值对对象的容器

遍历键值对对象的容器,获取到每一个键值对对象

根据键值对对象找键和值

B:案例演示

Map集合的遍历之键值对对象找键和值

    public static void add() {

        Map<String,String> map = new HashMap<>();

        map.put("1233", "lisi");

        map.put("13", "lisi1");

        map.put("134", "lisi2");

        map.put("134", "lis");

        Set<Entry<String,String>> set = map.entrySet();

        for (Entry<String, String> entry : set) {

        }

    }

5.HashMap集合键是String值是Student的案例

A:案例演示

HashMap集合键是Student值是String的案例

```java public static void add() { Map<String, Student> map = new HashMap<>(); Student student = new Student(1, "lisi"); map.put(student.getId()+"", student);

} ```

                                             6.LinkedHashMap的概述和使用

A:案例演示

LinkedHashMap的特点

底层是链表实现的可以保证怎么存就怎么取

7.TreeMap集合键是Student值是String的案例

A:案例演示

TreeMap集合键是Student值是String的案例(会对key值排序)

8.统计字符串中每个字符出现的次数

A:案例演示

需求:统计字符串中每个字符出现的次数

9.容器嵌套之HashMap嵌套HashMap

A:案例演示

容器嵌套之HashMap嵌套HashMap

10.HashMap和Hashtable的区别

A:面试题

HashMap和Hashtable的区别

Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高

Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

B:案例演示

HashMap和Hashtable的区别

                               

                                                              TreeMap:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容