Map學習二之LinkedHash,HashTable,計算一個給定字符串的每一個字符出現的次數

package com.itheima.demo03.Map;java

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

}code

package com.itheima.demo03.Map;接口

import java.util.HashMap;
import java.util.Hashtable;字符串

/*get

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 {it

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
}

}io

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

}

相關文章
相關標籤/搜索