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

}