一 HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。但是HashSet允许有null值。HashSet 是无序的,也不是线程安全的, 如果多个线程尝试同时修改 HashSet,那么最终结果不确定。
HashSet 实现了 Set 接口。
HashSet 中的元素实际上是对象,因此当我们存储基本数据类型的数据时,需要用它们地点包装类。
HashSet的基本使用方法如下:
1.新建对象
HashSet<String> set = new HashSet<String>();
2.添加元素
set.add("zhangsan")
在使用add()方法添加时,相同的元素不会被重复添加,例如:2.判断元素是否存在
set.contains("wangwu")
3.删除元素
set.remove("zhangsan")
4.删除所有元素
set.clear();
5.计算大小
set.size()
6.遍历 HashSet
for (String i : set) {
System.out.println(i);
}
二 HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
HashMap 的 key 与 value 类型可以相同也可以不同,但必须是对象,不能使用基本数据类型。
1.创建对象
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
2.添加元素
Sites.put(1, "Google");
3.访问元素
Sites.get(3)
4.删除元素
Sites.remove(4);
5.删除所有
Sites.clear();
6.计算大小
Sites.size()
7.遍历
8.其他方法
方法 | 描述 |
---|---|
clear() | 删除 hashMap 中的所有键/值对 |
clone() | 复制一份 hashMap |
isEmpty() | 判断 hashMap 是否为空 |
size() | 计算 hashMap 中键/值对的数量 |
put() | 将键/值对添加到 hashMap 中 |
putAll() | 将所有键/值对添加到 hashMap 中 |
putIfAbsent() | 如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。 |
remove() | 删除 hashMap 中指定键 key 的映射关系 |
containsKey() | 检查 hashMap 中是否存在指定的 key 对应的映射关系。 |
containsValue() | 检查 hashMap 中是否存在指定的 value 对应的映射关系。 |
replace() | 替换 hashMap 中是指定的 key 对应的 value。 |
replaceAll() | 将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。 |
get() | 获取指定 key 对应对 value |
getOrDefault() | 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值 |
forEach() | 对 hashMap 中的每个映射执行指定的操作。 |
entrySet() | 返回 hashMap 中所有映射项的集合集合视图。 |
keySet() | 返回 hashMap 中所有 key 组成的集合视图。 |
values() | 返回 hashMap 中存在的所有 value 值。 |
merge() | 添加键值对到 hashMap 中 |
compute() | 对 hashMap 中指定 key 的值进行重新计算 |
computeIfAbsent() | 对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hasMap 中 |
computeIfPresent() | 对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。 |
三 经典习题---力扣1:两数之和
给定一个整数数组
nums
和一个整数目标值target
,请你在该数组中找出 和为目标值target
的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i< nums.length; i++) {
if(map.containsKey(target - nums[i])) {
return new int[] {map.get(target-nums[i]),i};
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
}