不同点
HashMap | HashSet | |
---|---|---|
实现的接口 | Map、Cloneable、Serializable | Set |
存储对象的方式(适用情况) | HashMap存储的内容是键值对(Key和Value)的映射,它保持了Key和Value之间的对应关系。 | HashSet基于HashMap实现的,是一个集合 |
是否允许元素重复 | 不允许重复的Kry,但它允许重复的Value,即允许重复的值。 | 不允许有重复的元素,即不能存重复的值。 |
是否允许null | 允许一个null 的Key和任意数量的空Value。 | 仅允许具有单个空值。 |
相似点
- HashMap和HashSet都是无序的,他们都不会记录插入的顺序;
- 两者都不支持线程同步(?);
- 他们都提供了基于时间的基本操作,例如添加、删除元素或值;
示例
HashMap
import java.util.HashMap;
public class MyHashMap {
HashMap<Integer, String> myMap = new HashMap<>(); // 注意这里我已经规定为int和string
HashMap<Integer, String> map2 = new HashMap<>();
/*
* put方法:key,value
* 一般把key作为引索,value用来存东西
*/
public void mapPut(){
myMap.put(1,"你好");
myMap.put(2,"怎么样");
myMap.put(3,"还行吧");
myMap.put(4,"就那样");
System.out.println(myMap);
}
/*
* get按照key的值来
*/
public void mapGet(int num) {
System.out.println(myMap.get(num));
}
/*
* contains有返回TRUE
* 无返回FALSE
*/
public void mapContains(){
System.out.print("containsKey 3:"+myMap.containsKey(3)+" | ");
System.out.print("containsKey 6:"+myMap.containsKey(6)+" | ");
System.out.println("containsValue 就那样:"+myMap.containsValue("就那样"));
}
/*
* 返回所有的key
*/
public void mapKey() {
System.out.println(myMap.keySet());
}
/*
* putAll会把所有的东西映射到被putall的map里
* 但如果被putall的map里有独有的东西是不会被清除的
* 详细参考:https://www.runoob.com/java/java-hashmap-putall.html
*/
public void mapPutAll() {
map2.put(7,"你没有");
map2.putAll(myMap); // 将myMap映射到map2
System.out.println(map2);
}
/*
* 返回映射中所有 value 组成的 Set 视图
*/
public void mapValue() {
System.out.println(myMap.values());
}
public void mapRemove() {
map2.remove(3);
System.out.println(map2);
}
}
输出结果:
HashSet
import java.util.HashSet;
public class MyHashSet {
HashSet<String> set = new HashSet<>();
//add方法只允许每个元素添加一次
public void setAdd() {
set.add("你好!");
set.add("我是Aicy");
set.add("你的个人助理");
set.add("你好!"); // 测试重复项
System.out.println(set);
}
public void setContains(Object o) {
System.out.println("查找 你好!:" + set.contains(o));
System.out.println("查找 233:" + set.contains(233));
}
// 迭代器
public void out() {
for (String i : set) {
System.out.println(i);
}
}
}
输出结果: