JavaEE | 集合2之Map

JavaEE | 集合2之Map

  • 1. Map概述
  • 2.Map接口和Collection接口的的区别
  • 3. Map集合功能概述
  • 4. Map集合的遍历
  • 5. HashMap
  • 6. Hashtable
  • 7.linkedHashMap
  • 8. TreeMap
  • 9. 练习:统计字符串中每个字符出现的次数

JavaEE | 集合2之Map_第1张图片

1. Map概述

    //键           值
    //s001--------张三
    //s002--------李四
    //s003--------王五

Java针对这种键值映射关系的数据,给我们提供了另外一种容器Map,用来存储这种键值映射关系的数据
Map接口概述:

  1. 将键映射到值的对象
  2. 一个映射不能包含重复的键
  3. 每个键最多只能映射到一个值
    Map的体系如下:
    JavaEE | 集合2之Map_第2张图片

2.Map接口和Collection接口的的区别

  1. Map是双列的,Collection是单列的
  2. Map的键唯一,Collection的子体系Set是唯一的
  3. Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

3. Map集合功能概述

用HashMap作为实现类说明

  1. 增加功能
    void put(K key,V value)

  2. 删除功能
    void clear():移除所有的键值对元素
    V remove(Object key):根据键删除键值对元素,并把值返回

  3. 判断功能
    boolean containsKey(Object key):判断集合是否包含指定的键
    boolean containsValue(Object value):判断集合是否包含指定的值
    boolean isEmpty():判断集合是否为空

  4. 获取功能
    1.Set> entrySet(): 返回一个键值对的Set集合
    2.V get(Object key):根据键获取值
    3.Set< k > keySet():获取集合中所有键的集合 键唯一,所以用Set集合
    4.Collection values():获取集合中所有值的集合 值不一定唯一,有可能有重复,所以用Collection集合

  5. 长度功能
    int size():返回集合中的键值对的对数

4. Map集合的遍历

方法一::键找值

  • 获取所有键的集合
  • 遍历键的集合,获取到每一个键
  • 根据键找值
        Set<Integer> integers = hashMap.keySet(); //获取所有键的集合
        for (Integer integer : integers) {
            System.out.println(integer);
            String s = hashMap.get(integer);
            System.out.println(s);
        }

		Collection<String> values = hashMap.values(); //获取所有值的集合
        for (String value : values) {
            System.out.println(value);
        }
        System.out.println("*************************");

方法二:键值对

  • 获取所有键值对对象的集合
  • 遍历键值对对象的集合,获取到每一个键值对对象
  • 根据键值对对象找键和值
		Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }

5. HashMap

数据结构是哈希表,键唯一且无序
注:键唯一,靠键重写equals方法来保证;合理的重写hashCode方法,可以元素减少碰撞

6. Hashtable

Hashtable和HashMap 的区别:

  • HashMap 允许存储null键和null值 线程不安全效率高
  • Hashtable 不允许null键和null值 线程安全效率低

7.linkedHashMap

底层的数据结构是链表和哈希表,元素唯一且有序
元素的有序性由链表数据结构保证,唯一性由 哈希表数据结构保证

8. TreeMap

键的数据结构是红黑树,可保证键的唯一且有序 ,线程不安全,效率高,TreeMap 键不允许插入null
特点:排序分为自然排序和比较器排序
空参构造:自然排序

        TreeMap<Integer, String> treeMap = new TreeMap<>();
        treeMap.put(14,"abc");
        treeMap.put(16, "abc");
        treeMap.put(155, "abc");
        treeMap.put(11, "abc");
        treeMap.put(12, "abc");
        System.out.println(treeMap);
        System.out.println("***********************");

有参构造,比较器排序

        //有参构造
        TreeMap<Student, Integer> map = new TreeMap<>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num1=s1.getAge()-s2.getAge();
                int num2=num1==0? s1.getName().compareTo(s2.getName()) :num1;
                return num2;
            }
        });

        map.put(new Student("tom",28),19);
        map.put(new Student("lucy",18),15);
        map.put(new Student("Mark",30),18);
        map.put(new Student("mike",28),15);
        map.put(new Student("tom",28),89);

        Set<Map.Entry<Student, Integer>> entries = map.entrySet();
        for (Map.Entry<Student, Integer> entry : entries) {
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }

9. 练习:统计字符串中每个字符出现的次数

		String s="aababcabcdabcde";
        TreeMap<Character, Integer> treeMap = new TreeMap<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(!treeMap.containsKey(c)){
                treeMap.put(c,1);
            }else{
                Integer integer = treeMap.get(c);
                integer++;
                treeMap.put(c,integer);
            }
        }
        StringBuffer sb = new StringBuffer();
        Set<Map.Entry<Character, Integer>> entries = treeMap.entrySet();
        for (Map.Entry<Character, Integer> entry : entries) {
            sb.append(entry.getKey()).append("(").append(entry.getValue()).append(") ");
        }
        System.out.println(sb);

你可能感兴趣的:(JavaEE)