Map集合

概述

  • java.util.Map<k,v>集合特点:
    1)Map集合是一个双列集合,一个元素包含两个值;
    2)Map集合中的元素,key和value的数据类型可以相同,也可以不同;
    3)Map集合中的元素,key是不允许重复的,value可以重复(key重复了就会用新的value值将旧的value值替换掉);
    4)Map集合中的元素,key和value是一一对应的;

Map常用子类

  • java.util.HashMap<K,V>集合 implements Map<k,v>接口
  • HashMap的特点:
    1)HashMap集合底层是哈希表:查询速度快
    2)HashMap集合是一个无序的集合,存储元素和取出元素的顺序可能不一致;
  • java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合
  • LinkedHashMap集合的特点:
    1)LinkedHashMap底层是哈希表+链表结构(保证迭代的顺序)
    2)LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的;

Map接口中常用方法

常用方法

  • 第一种遍历方式:
    1)使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个set集合中;
    2)遍历set集合,获取Map集合中的每一个key;
    3)通过Map集合中的get(key)方法,通过key找到value;
public class MapTest {

    public static void main(String[] args) {
        Map<String,Integer> map = new  HashMap<>();
        map.put("林志颖",18);
        map.put("林志玲",18);

        Set<String> set = map.keySet();
        for(String key:set){
            Integer value=map.get(key);
        }
    }
}
  • 第二种遍历方式:
  • Map.Entry<k,v>:在Map接口中有一个内部接口Entry
    作用:当Map集合一put个元素,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
    Map.Entry对象集合
  • 实现步骤:
    1)使用Map集合中的方法entryset(),把Map集合中多个Entry对象取出来,存储到一个set集合中;
    2)遍历set集合,获取每一个Entry对象;
    3)使用Entry对象中的方法getKey()和getValue()获取键与值;
public class MapTest {

    public static void main(String[] args) {
        Map<String,Integer> map = new  HashMap<>();
        map.put("林志颖",18);
        map.put("林志玲",18);
        //遍历
        Set<Map.Entry<String,Integer>> set1 = map.entrySet();
        Iterator<Map.Entry<String,Integer>> it= set1.iterator();
        while (it.hasNext()){
            Map.Entry<String,Integer> entry = it.next();
            String key = entry.getKey();
            Integer value = entry.getValue();
        }
    }
}

HashMap存储自定义类型键值

  • map集合必须保证key是唯一的:作为key的元素,必须重写hashcode方法和equals方法,以保证key唯一;(put元素时会判断key是否重复通过hashcode方法和equals方法)
  • 若自定义类型作为key,则需要重写hashcode方法和equals方法;若作为value,则无需重写hashcode方法和equals方法;
//Person中需要重写hashcode方法和equals方法
        Map<Person,String> map1=new HashMap<>();
        map1.put(new Person("ff",12),"中国");
        map1.put(new Person("ff",12),"中国");
        map1.put(new Person("gg",16),"中国");

        System.out.printf(map1.toString());

LinkedHashMap集合

  • key不允许重复,有序(存储和取出顺序一致)

Hashtable<k,v>集合

  • java.util.Hashtable<k,v> implements Map<k,v>接口
  • Hashtable:底层是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢;
    HashMap:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快;
  • HashMap集合(与及之前的所有集合):可以存储null值,null键
    Hashtable集合,不能存储null值和null键
  • Hashtable和Vector集合一样,在jdk1.2版本之后被更先进的集合(HashMap,ArrayList)取代了;
  • Hashtable的子类Properties依然活跃在历史舞台
    Properties集合是唯一一个和IO流相结合的集合
        HashMap<String,String> map=new HashMap<>();
        map.put(null,null);//允许存储null和null键

        Hashtable<String,String> map1 = new Hashtable<>();
        map1.put(null,null);//运行时报错,空指针异常

JDK9对集合添加的优化

  • List接口/Set接口/Map接口:里边增加了一个静态方法of,可以给集合一次性添加多个元素;
  • static List of (E… elements)
    使用前提:当集合中存储元素的个数已经确定了,不在改变时使用;
  • 注意:
    1)of方法只适用于 List接口/Set接口/Map接口,不适用于接口的实现类
    2)of方法的返回值是一个不能改变的集合,集合不能在使用add/put方法添加元素,否则会抛出异常;
    3)Set接口Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常;
        //List接口
        List<String>  list = List.of("a","b","a","c","d");
        list.add("w");//运行时报错,不支持操作异常
        
        //Set接口和Map接口,不允许存相同元素或相同key
        Set<String> set = Set.of("a","b","c","a","d");//报错,非法参数异常,存在重复元素
        set.add("w");//运行时报错,不支持操作异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值