Map和Set这两种java中集合框架接口学习
1.使用场景:需要搜索的场景
纯key模型:set背后的原理
判断集合中包含一个特定的元素,查找该元素是否已经在集合中了
key-value模型:Map背后的原理
key和value的一组映射关系
根据key查找对应的value
2.搜索背后的原理及数据结构
1)搜索树
2)哈希表
3)跳表
一.Map映射接口
Map<key,value>
它提供key到value的映射。Map中不能包含相同的key,每个key只能映射一个value,但是可以有多个相同的value。
Map接口提供三中集合的视图,Map的内容可以被当做一组key集合,一组value集合或者一组key-value映射。
常见的方法:
Map.Entry<K, V> 即 Map 中定义的 K 类型的 key 和 V 类型的 value 的映射关系的类。
方法 | 解释 |
K getKey() | 返回 entry 中的 key |
V getValue() | 返回 entry 中的 value |
常用方法:
import java.util.*;
public class MapDemo {
public static void main(String[] args) {
Map<Integer,String> map=new HashMap<>();
//Map<key,value>
//put<key,value> 设置 key 对应的 value,key重复,则不打印
//他们打印的顺序与key值的顺序无关
map.put(1,"hello");
map.put(1,"Hello");
map.put(2,"Java");
map.put(3,"java");
map.put(10,"C++");
System.out.println(map);
//返回key对应的value
System.out.println(map.get(2));
//查不到返回null
System.out.println(map.get(50));
//返回 key 对应的 value,key 不存在,返回默认值(defaulltValue)
System.out.println(map.getOrDefault(2,"默认值"));
System.out.println(map.getOrDefault(4,"默认值"));
System.out.println(map);
//打印所有的key
for(Integer key:map.keySet()){
System.out.println(key);
}
//打印所有的key
for(String value:map.values()){
System.out.println(value);
}
//删除key对应的映射关系
map.remove(1);
System.out.println(map);
//按key-value映射关系打印
for(Map.Entry<Integer,String> entry:map.entrySet()){
System.out.println(entry);
}
}
}
运行截图:
二.Set接口
Set<key> Set是一种不包含重复元素的Collection,继承了Collection接口,即任意的两个元素e1和e2比较,结果都不相等,set最多有一个null元素。
Set的常用方法:
import java.util.*;
public class SetMap {
public static void main(String[] args) {
Set<String> set=new HashSet<>();
//添加,重复元素不打印
set.add("Hello");
set.add("Java");
set.add("C++");
set.add("Java");
set.add("java");
System.out.println(set);
set.remove("C++");
//remove(O)删除集合中的O
System.out.println(set);
//contains(O)判断O是否在集合中
System.out.println(set.contains("Love"));
//返回迭代器
Iterator<String> it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//清空集合
set.clear();
System.out.println(set);
}
}
运行截图:
注意:在Map和Set中,打印出的结果顺序不一定是添加进去的顺序,顺序不唯一