概念
map 和 set 是一种专门用来搜索和查询的容器或数据结构,效率很高。是为了解决在 “增删查改” 情况下使用的数据结构。
map set 模型:一般把搜索的数据称为关键字 (key) ,和关键字对于的称为值(value) 称为 key-value 的键值对。纯 key 模型:set。key - value 模型:map
Map
HashMap 在存储元素的时候,是根据一个函数进行存储的,具体存储到哪里,由函数来确定。这个函数就是哈希函数。所以输出的时候,并不是按照存储顺序进行输出的。Map是一个接口类,没有继承自Collection,类中存储的是 <K,V> 结构的键值对,并且 K 一定是唯一的,不能重复。在遇到相同的 K 的时候,V 是可以改变的。
put
在 map 当中,put 是放入元素的意思,有两个参数,第一个是 key ,第二个是 value ,代码如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
System.out.println(map);
}
运行结果如下:
输出的时候并不是按照输入顺序输出的。
put 如果存储元素的时候,如果 key 值相同的话,val 值会覆盖。代码如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
map.put("abc",5);
System.out.println(map);
}
运行结果如下:
get
使用 get 通过 key 来获取对应的 value 的值。代码如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
int ret = map.get("abc");
System.out.println(ret);
}
运行结果如下:
getOrDefault
getOrDefault 方法有两个参数,一个是 key ,如果没有 key 的话,就返回设置的默认值。如果有 key 的话,就返回 key 的 value 。代码如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
System.out.println(map.getOrDefault("abc",98));
}
运行结果如下:
因为 abc 存在,所以返回 abc 的 value 。就是 3 。
remove
remove 方法有一个参数,参数是输入的 key ,返回对应的 value 。如果没有 key 的话,就返回 null 。代码如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
Integer ret2 = map.remove("abc");
System.out.println(ret2);
}
运行结果如下:
Set
set 是一个集合,存入里面的数据会自动去重。Set 是继承自 Collection 的接口类,Set 中只存储了 Key 。
entrySet
entrySet 会把 map 的 key 和 value 放在一起,然后变成 set 类型。代码如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
map.put(null,null);
Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
for (Map.Entry<String, Integer> entry : entrySet) {
System.out.println(entry.getKey()+"->"+entry.getValue());
}
}
运行结果如下:
set 自动去重
放入 set 的数据会自动去重,代码如下:
public static void main4(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(1);
System.out.println(set);
}
运行结果如下:
Iterator 接口
set 可以通过 Iterator 接口来输出内容,代码如下:
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(1);
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}