JavaSE 之集合Map的随笔

Map(接口)集合

  • Map中的元素,元素是成对存在的。每个元素由键与值两部分组成,通过键可以找对应的值。

  • 需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

    常用的方法:

    public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。

    public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的 值。

    public V get(Object key) 根据指定的键,在Map集合中获取对应的值。

    boolean containsKey(Object key)判断集合中包含指定的键包含就返回true,不包含就返回false;

     

     HashMap<String, Integer> map = new HashMap<>();
            map.put("小明",168);
            map.put("小红",170);
            map.put("小华",166);
            map.put("小明",156);
            //保证值的唯一性,会覆盖之前的内容,{小明=156, 小华=166, 小红=170}
            System.out.println(map);
    ​
            Integer v1 =map.remove("小李");
            System.out.println(v1);
            //有该值就返回该值,没有就返回null
            
            Integer v3 = map.get("小张");
            System.out.println(v3);
            //有该值就返回该值,没有就返回null
    ​
            boolean xiaohua = map.containsKey("小华");
            System.out.println(xiaohua);
            //true
          

    tips

    使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;

    若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。

    HashMap<String, Integer> map = new HashMap<>();
            Integer xiao = map.put("小明", 168);
            System.out.println(xiao );//null
            
            Integer xiaoming1 = map.put("小明", 155);
            System.out.println(xiaoming1);//168

     

    public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中。

    public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。

    private static void method() {
            HashMap<String, String> map = new HashMap<>();
            map.put("小明", "xiaoming");
            map.put("小红", "xiaohong");
            map.put("小陈", "xiaochen");
            map.put("小华", "xiaohua");
    ​
            Set<String> keys = map.keySet();
            //Map不能自己遍历,要先转换成Set集合
            Iterator<String> it = keys.iterator();
            while(it.hasNext()){
                String key = it.next();
                String value = map.get(key);
                System.out.println(key+"...."+value);
            }
            System.out.println(".................");
            //使用增强for循环遍历Set集合
            for(String key:keys){
                String value = map.get(key);
                System.out.println(key+"--"+value);
    ​
            }
        }
                        /*小陈....xiaochen
                        小明....xiaoming
                        小华....xiaohua
                        小红....xiaohong
                        .................
                        小陈--xiaochen
                        小明--xiaoming
                        小华--xiaohua
                        小红--xiaohong*/
    ​

     

HashMap集合

  • HashMap:存储数据采用的是哈希表结构,元素的存取顺序不能保证一致,由于要保证键的唯一、不重复,需要重写键的hashcode()方法和equals()方法。

  • Hashmap的实现原理:HashMap是基于Hash算法实现的,我们通过put(key,vlaue)存储,get(key)来获取。当传入key时,HashMap会根据key.hashCode()计算Hash值,根据Hash值来保存在bucket里。当计算hash值相同时,我们称之为hash冲突,hash做法是用链表和红黑树存储相同hash值的value.当hash冲突的个数比较少时,使用链表否则使用红黑树。

     

LinkedHashMap集合

  • LinkedHashMap:是在HashMap的前提下,存储数据采用的是哈希表+链表结构。通过链表结构可以保证元素的存取顺序一致。

 

Hashtable集合

  • 默认初始容量为11,扩容增量:2*原数组长度+1

线程安全,但是速度慢,不允许key/value为null

 

 

 

Hashtable和Hashmap的区别

  • HashMap允许key和value为null,而Hashtable不允许

  • Hashtable是线程安全的,而HashMap是非线程安全的

  • Hashtable中hash数组默认大小是11,增加的方式是old*2+1,而HashMap中的hash数组默认大小是16,而且一定是2的指数。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值