Java集合之Map集合

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

Map集合的功能

  a:添加功能
  V put(K key,V value):添加元素。这个其实还有另一个功能?替换
  如果键是第一次存储,就直接存储元素,返回null
  如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
  b:删除功能
  void clear():移除所有的键值对元素
  V remove(Object key):根据键删除键值对元素,并把值返回
  c:判断功能
  boolean containsKey(Object key):判断集合是否包含指定的键
  boolean containsValue(Object value):判断集合是否包含指定的值
  boolean isEmpty():判断集合是否为空
  d:获取功能
  Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合
  V get(Object key):根据键获取值
  Set keySet():获取集合中所有键的集合
  Collection values():获取集合中所有值的集合
  e:长度功能
  int size():返回集合中的键值对的对数

  HashMap允许插入null键 null值

HashMap的遍历方法

  1、获取所有键的集合,遍历键的集合,获取到每一个键,根据键找值

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapBL {
    public static void main(String[] args) {
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        treeMap.put(1,"one");
        treeMap.put(2,"two");
        treeMap.put(3,"three");
        Set<Integer> integers = treeMap.keySet();
        for (Integer integer : integers) {
            String s = treeMap.get(integer);
            System.out.println(integer+" "+s);
        }

  2、获取所有键值对对象的集合,遍历键值对对象的集合,获取到每一个键值对对象,根据键值对对象找键和值

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapBL {
    public static void main(String[] args) {
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        treeMap.put(1,"one");
        treeMap.put(2,"two");
        treeMap.put(3,"three");
        Set<Map.Entry<Integer, String>> entries = treeMap.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+" "+value);
        }
    }
}
LinkedHashMap的特点

  Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序,底层的数据结构是链表和哈希表,元素有序并且唯一,元素的有序性由链表数据结构保证,唯一性由哈希表数据结构保证,Map集合的数据结构只和键有关

TreeMap的特点

  键的数据结构是红黑树,可保证键的排序和唯一性,排序分为自然排序和比较器排序 ,线程是不安全的效率比较高

  注意:TreeMap键不允许插入null

  案例演示:统计字符串中每个字符出现的次数
  思路:将字符串变成字符数组,循环遍历存入HashMap中,每次存入单个元素时检验一下,如果HashMap没有,就设为1,若果有就给这个元素的个数加上1。

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

public class NumSum {
    public static void main(String[] args) {
        String str = "dsd9d89sd8";
        char[] chars = str.toCharArray();
        HashMap<Object, Integer> ha = new HashMap<>();
        for (int i = 0; i < chars.length; i++) {
            if (!ha.containsKey(chars[i])) {
                ha.put(chars[i], 1);
            } else {
                Integer integer = ha.get(chars[i]);
                integer++;
                ha.put(chars[i], integer);
            }
        }
        Set<Map.Entry<Object, Integer>> entries = ha.entrySet();
        for (Map.Entry<Object, Integer> entry : entries) {
            Object key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+"-"+value);
        }
    }
}

集合嵌套

  案例:用嵌套集合输出下面内容,要求排版格式相同

  jc 基础班
    张三 20
    李四 22
  jy 就业班
    王五 21
    赵六 23

  1、HashMap嵌套嵌套HashMap,HashMap的每个元素都是一个HashMap值

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

public class HashQT {
    public static void main(String[] args) {
        HashMap<String, Integer> jc = new HashMap<>();
        jc.put("张三",20);
        jc.put("李四",22);
        HashMap<String, Integer> jy = new HashMap<>();
        jy.put("王五",21);
        jy.put("赵六",23);
        HashMap<String, HashMap> hashMap = new HashMap<>();
        hashMap.put("jc  基础班",jc);
        hashMap.put("jy  就业班",jy);
        Set<Map.Entry<String, HashMap>> entries = hashMap.entrySet();
        for (Map.Entry<String, HashMap> entry : entries) {
            String key = entry.getKey();
            System.out.println(key);
            HashMap value = entry.getValue();
            Set<Map.Entry<String,Integer>>entries1 = value.entrySet();
            for (Map.Entry<String, Integer> entry1 : entries1) {
                String key1 = entry1.getKey();
                Integer value1 = entry1.getValue();
                System.out.println("\t\t"+key1+"    "+value1);
            }
        }

    }
}

   2、HashMap嵌套ArrayList
  HashMap的元素是ArrayList集合

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

public class HashQT {
    public static void main(String[] args) {
        ArrayList<String> base = new ArrayList<>();
        base.add("张三     20");
        base.add("李四     22");
        ArrayList<String> work = new ArrayList<>();
        work.add("王五     21");
        work.add("赵六     23");
        HashMap hashMap = new HashMap<String,ArrayList>();
        hashMap.put("jc  基础班",base);
        hashMap.put("jy  就业班",work);
        Set<Map.Entry<String,ArrayList>>entries = hashMap.entrySet();
        for (Map.Entry<String, ArrayList> entry : entries) {
            String key = entry.getKey();
            ArrayList value = entry.getValue();
            System.out.println(key);
            for (Object o : value) {
                System.out.println("      "+o);
            }
        }
    }
}

  还可以有其他嵌套,方式都相似

HashMap和Hashtable
HashMap: 线程不安全,效率高.允许null值和null键
Hashtable: 线程安全 , 效率低.不允许null值和null键
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值