• 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的底层实现都是数组+链表结构实现。

  • 相关阅读:
    智能合约初体验
    安装solidity遇见的问题——unused variable 'returned'
    Clojure学习笔记(二)——函数式编程
    《Java虚拟机并发编程》学习笔记
    Clojure学习笔记(一)——介绍、安装和语法
    Ubuntu配置pyethapp
    no leveldbjni64-1.8 in java.library.path
    Merkle Patricia Tree (MPT) 树详解
    Ubuntu下配置和编译cpp-ethereum客户端
    conda安装python库出现ssl error
  • 原文地址:https://www.cnblogs.com/feimaoyuzhubaobao/p/9955788.html
Copyright © 2020-2023  润新知