Java学习笔记-5
一、Map集合
1.双列集合,为键值对形式,类似于python的字典
2.key不允许重复,value可重复
1.HashMap
1.实现了Map接口
2.底层为哈希表,查询速度快
3.存取无序
1)LinkedHashMap
1.继承了HashMap
2.底层为哈希表+链表
3.存取有序
2)存储自定义类型元素
由于key不重复,故自定义类必须重写hashCode和equals方法
2.HashTable
1.底层为哈希表,单线程(HashMap为多线程),速度慢
2.key和value均不能为null
3.常用方法
1.put(key,value) 将键值对插入集合,若key重复则返回被替代的value,否则返回null
2.remove(key) 删除指定键值对,若key存在返回对应的value,不存在则返回null
3.get(key) 获得键对应的值,key不存在返回null
4.containsKey(key) 判断是否包含指定键,返回布尔值
遍历Map
1.keySet() 将集合中全部键取出存储到一个Set集合中,再遍历Set集合通过get(key)方法遍历value
2.Entry接口
在Map创建时会自动创建Entry对象记录键和值,一个键值对对应一个Entry对象
(1) entrySet() 将Map内全部Entry对象取出放入Set
(2) getKey() 获取key
(3) getValue() 获取value
二、Debug调试
f8:执行下一行
f7:进入方法
shift+f8:跳出方法
f9:跳到下一断点
package day4;
import java.util.*;
public class day4 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("A","AAA");
map.put("B","BBB");
map.put("C","CCC");
map.remove("B");
System.out.println(map);
//遍历
Set<String> set = map.keySet();
// for(String s : set)
// {
// System.out.println(map.get(s));
// }
Iterator it = set.iterator();
while(it.hasNext())
{
System.out.println(map.get(it.next()));
}
Set<Map.Entry<String,String>> set2 = map.entrySet();
for(Map.Entry<String,String> entry : set2)
{
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "=" + value);
}
//存储自定义类型元素
Map<Person,String> map2 = new HashMap<Person, String>();
map2.put(new Person("张三",18),"中国");
map2.put(new Person("Andy",19),"美国");
map2.put(new Person("李四",20),"中国");
map2.put(new Person("Andy",19),"法国");
Set<Map.Entry<Person,String>> set3 = map2.entrySet();
for(Map.Entry<Person,String> entry : set3)
{
System.out.println(entry.getKey() + " " + entry.getValue());
}
//统计一个字符串中每个字符出现的次数
Scanner sc = new Scanner(System.in);
System.out.println("请输入内容:");
String str = sc.next();
char[] content = str.toCharArray();
LinkedHashMap<Character,Integer> map3 = new LinkedHashMap<>();
for(int i = 0;i < content.length; i++)
{
if(map3.containsKey(content[i]))
{
Integer value = map3.get(content[i]);
value++;
map3.put(content[i],value);
}
else
{
map3.put(content[i],1);
}
}
Set<Map.Entry<Character,Integer>> txt = map3.entrySet();
for(Map.Entry<Character,Integer> entry2 : txt)
{
System.out.println(entry2.getKey() + ":" + entry2.getValue() + "次");
}
}
}