接口Map<K,V>
key,value
特点:
- 键唯一
- 一个键映射一个值
- 按键之间的关系维护元素
常用方法:
boolean containsKey(Object key):判断key是否存在
boolean containsValue(Object value):value是否存在
注:put方法中如果key存在,替换value,旧value作为返回值;如果不存在,添加此元素;
remove方法如果key存在返回被删的值,不存在返回空
案例:Entry内部类,entrySet方法的使用
import study001.hash.Person;
import java.util.*;
public class SetTest {
public static void main(String[] args) {
Map<String,Integer>map=new HashMap<>();
map.put("小明",18);
map.put("李华",99);
map.put("小王",18);
Set<Map.Entry<String, Integer>> elements = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = elements.iterator();
while(iterator.hasNext()){
Map.Entry<String,Integer> ele= iterator.next();
String key=ele.getKey();
Integer value=ele.getValue();
System.out.println(key+"---"+value);
}
System.out.println("------------------------------");
for(Map.Entry<String,Integer>ele:elements){
String key=ele.getKey();
Integer value=ele.getValue();
System.out.println(key+"---"+value);
}
}
}
HashMap<K,V>
特点:
- 无序,
- 多线程
存储自定义类型值
自定义类型值作键必须重写hashCode()方法和equals()方法。
自定义类型值作值可以没有这两个方法。
HashTable集合
特点:
- 不允许存在空的键或值
- 是单线程集合(同步的)
它的子类Properties集合是唯一和IO六结合的集合
LinkedHashMap<K,V>
继承了HashMap
特点:
- 哈希表和链表实现的,所以有迭代顺序
- 多线程
练习: 计算一个字符串中每个字符出现的次数
package study001.hash;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class MapTest {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入字符串:");
String str=scan.next();
Map<Character,Integer> map=new HashMap<>();
for(char ch:str.toCharArray()){
if(map.containsKey(ch)){
Integer value=map.get(ch);
map.put(ch,value+1);
}else{
map.put(ch,1);
}
}
for(Character ch:map.keySet()){
System.out.println(ch+":"+map.get(ch));
}
}
}
JDK9的优化–of静态方法