• Java学习笔记——浅谈数据结构与Java集合框架(第三篇、Map)


    桃李春风一杯酒,江湖夜雨十年灯

                  ——寄黄几复

    之前图上写错了,是Hashtable类。t是小写的,它是个很古老的类,以至于命名都没有那么规范..

    HashMap

    HashMap就是存储key-value键值对的集合,是一种映射关系。key中的元素组成了一个Set集合(key无序,不允许重复,可以是null),且任意key中的元素有且只有一个value值与其对应(value值可以是null)

    上代码:

     1 public class MapTest {
     2 
     3     public static void main(String[] args) {
     4         Map<String, Integer> map = new HashMap<>();
     5         //成对放入
     6         map.put("疯狂Java讲义", 109);
     7         map.put("疯狂iOS讲义", 10);
     8         map.put("疯狂Ajax讲义", 79);
     9         //value可以重复
    10         map.put("轻量级Java EE企业应用实战", 79);
    11         //key重复时,新的value会覆盖原有的value,并返回被覆盖的value值,输出:10,不重复返回null
    12         System.out.println(map.put("疯狂iOS讲义", 108));
    13         //无序的,形式{key =value,key=value,...}
    14         System.out.println(map);
    15         //是否包含指定key,输出:true
    16         System.out.println(map.containsKey("疯狂Java讲义"));
    17         //是否包含指定value,输出:true
    18         System.out.println(map.containsValue(79));
    19         //获取所有key集合,通过key,value遍历所有
    20         for (String item : map.keySet()) {
    21             System.out.println(item+"--"+map.get(item));
    22         }
    23         //entry遍历
    24         for (Entry<String, Integer> item : map.entrySet()) {
    25             System.out.println(item.getKey()+"--"+item.getValue());
    26         }
    27         map.remove("疯狂Java讲义");
    28         System.out.println(map);
    29     }
    30 }

    Java8新增方法:

     1 public class MapTest02 {
     2 
     3     public static void main(String[] args) {
     4         Map<String, Integer> map = new HashMap<>();
     5         //成对放入
     6         map.put("疯狂Java讲义", 109);
     7         map.put("疯狂iOS讲义", 10);
     8         map.put("疯狂Ajax讲义", 79);
     9         //尝试替换value值
    10         map.replace("疯狂Java讲义", 56);
    11         System.out.println(map);
    12         //没有找到key,所以不会替换
    13         map.replace("疯狂Jav讲", 12);
    14         System.out.println(map);
    15         //使用原value与传入参数计算出来的结果覆盖原value
    16         //该方法调用BiFunction<T, U, R>接口的apply(oldValue, value)方法,该接口为函数式接口(只含有一个抽象方法的接口),可使用lambda表达式
    17         map.merge("疯狂Java讲义", 23, (oldVal,newVal) -> oldVal/newVal);//Value值为56/23
    18         //key为Java对应的value为null或者key本身为null时使用计算结果作为新value
    19         map.computeIfAbsent("Java", (key) -> ((String)key).length());
    20         //key为Java对应的value为存在时使用计算结果作为新value
    21         map.computeIfPresent("Java",(key,value) -> value*value );//感觉这个lambda表达式没什么用
    22         System.out.println(map);
    23     }
    24 }

    Hashtable

    Hashtable是一个线程安全的实现,HashMap是线程不安全的。所有HashMap性能比HashTable高一些。但如果多个线程访问同一个Map对象也可以使用Hashtable。

    Hashtable不允许使用null作为key值和value值,如果使用,将会引发NullPointerException

    判断HashMap和HashTable中key值是否重复的方法和判断HashSet中元素是否重复是一样的:

    1、两个key对象equals

    2、连个key对象的hashCode相等

    判断HashMap和HashTable都有containsValue()方法,判断连个value相等的标准是:

    两个对象通过equals方法比较返回true即可

     TreeMap

     类似TreeSet,TreeMap的key值自然排序

  • 相关阅读:
    Silverlight 4版本升级到4.0.60531.0
    Silverlight实例教程 理解Navigation导航框架Page类
    微软官方在线培训课程汇总2011版
    分享Silverlight/WPF/Windows Phone一周学习导读(07月11日07月17日)
    Linux内核简介
    Brief Summary of IaaS, PaaS, SaaS
    On Amazon EC2's Underlying Architecture
    Linux进程管理(2)
    一个诡异的时间问题追查[转]
    查看一个进程打开了哪些文件的命令
  • 原文地址:https://www.cnblogs.com/tomasman/p/6843636.html
Copyright © 2020-2023  润新知