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

33次阅读

共计 2237 个字符,预计需要花费 6 分钟才能阅读完成。

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);
    }
}

}

正文完
 0