• 0基础学java_Java类集之Map接口


    Map接口

    Collection操作之前已经发现,每次保存的对象都是一个对象。但是在Map中保存的是一对对象,以keyàvalue的形式保存。

    Map接口常用子类:

    HashMap:无序存放的,是新的操作类,key不允许重复

    HashTable: 无序存放的,是旧的操作类,key不允许重复

    TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复

    WeakHashMap:弱引用的Map集合,当集合中某些内容不再被引用时,可以清除掉无用的数据,可以使用GC进行回收

    IdetityHashMap:key可以重复的Map集合

    举例:向Map集合中插入数据

     1 package com.feimao.a1;
     2 
     3 
     4 
     5 import java.util.HashMap;
     6 
     7 
     8 
     9 public class HashMapDemo01 {
    10 
    11     public static void main(String args[]){
    12 
    13         HashMap<String , String> h = new HashMap<String , String>();
    14 
    15         h.put("feimao" , "zhubaobao");
    16 
    17         h.put("xiao" , "taotao");
    18 
    19         h.put("Hash" , "Demo");
    20 
    21         String s = h.get("xiao");
    22 
    23         System.out.println("取出的内容 :" + s);
    24 
    25     }
    26 
    27 }

    举例:在Map中使用contains方法()判断key和value的值是否存在

     1 package com.feimao.a1;
     2 
     3 
     4 
     5 import java.util.HashMap;
     6 
     7 
     8 
     9 public class HashMapDemo01 {
    10 
    11     public static void main(String args[]){
    12 
    13         HashMap<String , String> h = new HashMap<String , String>();
    14 
    15         h.put("feimao" , "zhubaobao");
    16 
    17         h.put("xiao" , "taotao");
    18 
    19         h.put("Hash" , "Demo");
    20 
    21      /*   String s = h.get("xiao");
    22 
    23         System.out.println("取出的内容 :" + s);*/
    24 
    25         if(h.containsKey("feimao")){
    26 
    27             System.out.println("搜索的key存在!");
    28 
    29         }else{
    30 
    31             System.out.println("搜索的key不存在");
    32 
    33         }
    34 
    35         if(h.containsValue("taotao1")){
    36 
    37             System.out.println("搜索的value存在!");
    38 
    39         }else{
    40 
    41             System.out.println("搜索的value不存在!");
    42 
    43         }
    44 
    45     }
    46 
    47 }

    HashMap和Hashtable的区别

    两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。

    Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合(Collections.synchronizedMap()实现原理是Collections定义了一个SynchronizedMap的内部类,这个类实现了Map接口,在调用方法时使用synchronized来保证线程同步,当然了实际上操作的还是我们传入的HashMap实例,简单的说就是Collections.synchronizedMap()方法帮我们在操作HashMap时自动添加了synchronized来实现线程同步,类似的其它Collections.synchronizedXX方法也是类似原理。

    HashMap可以使用null作为key,不过建议还是尽量避免这样使用。HashMap以null作为key时,总是存储在table数组的第一个节点上。而Hashtable则不允许null作为key。

    HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。

    HashMap扩容时是当前容量翻倍即:capacity*2,Hashtable扩容时是容量翻倍+1即:capacity*2+1。

    HashMap和Hashtable的底层实现都是数组+链表结构实现。

  • 相关阅读:
    如何实现Android欢迎页
    创建webapi的简单步骤
    IOS里Request的斗争(上)
    预告:关于接下来的部分,都是番外。
    利用Selenium制作python数据抓取,以及对Selenium资源介绍
    利用openpyxl来读取Excel数据
    在pycharm下快速添加插件
    C# 分布式缓存服务器方案
    2014中国省市数据库
    FormsAuthentication 登录兼容 IE11 保存cookie
  • 原文地址:https://www.cnblogs.com/feimaoyuzhubaobao/p/9955788.html
Copyright © 2020-2023  润新知