共计 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); | |
} | |
} |
}
正文完
发表至: java
2019-07-11