Map学习二之LinkedHash,HashTable,计算一个给定字符串的每个字符出现的次数

package com.itheima.demo03.Map;

import java.util.HashMap;

import java.util.LinkedHashMap;

/*

java.util.LinkedHashMap<K,V> entends HashMap<K,V>
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
底层原理:
    哈希表+链表(记录元素的顺序)

*/

public class Demo01LinkedHashMap {

public static void main(String[] args) {
    HashMap<String,String> map = new HashMap<>();
    map.put("a","a");
    map.put("c","c");
    map.put("b","b");
    map.put("a","d");
    System.out.println(map);// key不允许重复,无序 {a=d, b=b, c=c}

    LinkedHashMap<String,String> linked = new LinkedHashMap<>();
    linked.put("a","a");
    linked.put("c","c");
    linked.put("b","b");
    linked.put("a","d");
    System.out.println(linked);// key不允许重复,有序 {a=d, c=c, b=b}
}

}

package com.itheima.demo03.Map;

import java.util.HashMap;

import java.util.Hashtable;

/*

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流相结合的集合

*/

public class Demo02Hashtable {

public static void main(String[] args) {
    HashMap<String,String> map = new HashMap<>();
    map.put(null,"a");
    map.put("b",null);
    map.put(null,null);
    System.out.println(map);//{null=null, b=null}

    Hashtable<String,String> table = new Hashtable<>();
    //table.put(null,"a");//NullPointerException
    //table.put("b",null);//NullPointerException
    table.put(null,null);//NullPointerException
}

}

package com.itheima.demo03.Map;

import java.util.HashMap;

import java.util.Scanner;

/*

练习:
    计算一个字符串中每个字符出现次数

分析:
    1.使用Scanner获取用户输入的字符串
    2.创建Map集合,key是字符串中的字符,value是字符的个数
    3.遍历字符串,获取每一个字符
    4.使用获取到的字符,去Map集合判断key是否存在
        key存在:
            通过字符(key),获取value(字符个数)
            value++
            put(key,value)把新的value存储到Map集合中
        key不存在:
            put(key,1)
    5.遍历Map集合,输出结果

*/

public class Demo03MapTest {

public static void main(String[] args) {
    //1.使用Scanner获取用户输入的字符串
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个字符串:");
    String str = sc.next();
    //2.创建Map集合,key是字符串中的字符,value是字符的个数
    HashMap<Character,Integer> map = new HashMap<>();
    //3.遍历字符串,获取每一个字符
    //注意这里的char
    for(char c :str.toCharArray()){
        //4.使用获取到的字符,去Map集合判断key是否存在
        if(map.containsKey(c)){
            //key存在
            Integer value = map.get(c);
            value++;
            map.put(c,value);
        }else{
            //key不存在
            map.put(c,1);
        }
    }
    //5.遍历Map集合,输出结果
    //注意这里的Character
    for(Character key :map.keySet()){
        Integer value = map.get(key);
        System.out.println(key+"="+value);
    }
}

}

原文 

https://segmentfault.com/a/1190000019736908

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Map学习二之LinkedHash,HashTable,计算一个给定字符串的每个字符出现的次数

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址