目录
如果要计算 HashSet 中的元素数量可以使用 size() 方法:
一、Java HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
HashSet 实现了 Set 接口
基本类型 | 引用类型 |
---|---|
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
1、 添加元素
HashSet 类提供了很多有用的方法,添加元素可以使用 add() 方法:
// 引入 HashSet 类
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Apple");
sites.add("Banana");
sites.add("Orange");
sites.add("Peach");
sites.add("Banana); // 重复的元素不会被添加
System.out.println(sites);
}
}
执行以上代码,输出结果如下:
[Apple, Banana, Orange, Peach]
2、 判断元素是否存在
我们可以使用 contains() 方法来判断元素是否存在于集合当中:
// 引入 HashSet 类
import java.util.HashSet;
public class Maint {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Apple");
sites.add("Banana");
sites.add("Orange");
sites.add("Peach");
sites.add("Banana"); // 重复的元素不会被添加
System.out.println(sites.contains("Orange"));
}
}
执行以上代码,输出结果如下:
true
3、删除元素
我们可以使用 remove() 方法来删除集合中的元素:
// 引入 HashSet 类
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Apple");
sites.add("Banana");
sites.add("Orange");
sites.add("Peach");
sites.add("Banana"); // 重复的元素不会被添加
sites.remove("Orange"); // 删除元素,删除成功返回 true,否则为 false
System.out.println(sites);
}
}
执行以上代码,输出结果如下:
[Apple, Banana, Peach]
删除集合中所有元素可以使用 clear 方法:
// 引入 HashSet 类
import java.util.HashSet;
public class Main{
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Apple");
sites.add("Banana");
sites.add("Orange");
sites.add("Peach");
sites.add("Banana"); // 重复的元素不会被添加
sites.clear();
System.out.println(sites);
}
}
执行以上代码,输出结果如下:
[ ]
4、计算大小
如果要计算 HashSet 中的元素数量可以使用 size() 方法:
// 引入 HashSet 类
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Apple");
sites.add("Banana");
sites.add("Orange");
sites.add("Peach");
sites.add("Banana"); // 重复的元素不会被添加
System.out.println(sites.size());
}
}
执行以上代码,输出结果如下:
4
5、迭代 HashSet
可以使用 for-each 来迭代 HashSet 中的元素。
// 引入 HashSet 类
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Apple");
sites.add("Banana");
sites.add("Orange");
sites.add("Peach");
sites.add("Banana"); // 重复的元素不会被添加
for (String i : sites) {
System.out.println(i);
}
}
}
执行以上代码,输出结果如下:
Apple Banana Orange Peach
二、Java HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口
基本类型和引用类型表格对应见HashSet表(基本一样)
1.添加元素
HashMap 类提供了很多有用的方法,添加键值对(key-value)可以使用 put() 方法:
// 引入 HashMap 类
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Apple");
Sites.put(2, "Banana");
Sites.put(3, "Orange");
Sites.put(4, "Peach");
System.out.println(Sites);
}
}
执行以上代码,输出结果如下:
{1=Apple, 2=Banana, 3=Orange, 4=Peach}
2 、访问元素
我们可以使用 get(key) 方法来获取 key 对应的 value:
// 引入 HashMap 类
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Apple");
Sites.put(2, "Banana");
Sites.put(3, "Orange");
Sites.put(4, "Peach");
System.out.println(Sites.get(2));
}
}
执行以上代码,输出结果如下:
Banana
3、删除元素
我们可以使用 remove(key) 方法来删除 key 对应的键值对(key-value):
// 引入 HashMap 类
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Apple");
Sites.put(2, "Banana");
Sites.put(3, "Orange");
Sites.put(4, "Peach");
Sites.remove(3);
System.out.println(Sites);
}
}
执行以上代码,输出结果如下:
{1=Apple, 2=Banana, 4=Peach}
删除所有键值对(key-value)可以使用 clear 方法:
与HashSet删除全部一样,代码就不举例写了。
4、计算大小
如果要计算 HashMap 中的元素数量可以使用 size() 方法:
// 引入 HashMap 类
import java.util.HashMap;
public class Main{
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Apple");
Sites.put(2, "Banana");
Sites.put(3, "Orange");
Sites.put(4, "Peach");
System.out.println(Sites.size());
}
}
执行以上代码,输出结果如下:
4
5、迭代 HashMap
可以使用 for-each 来迭代 HashMap 中的元素。
如果你只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value,如果你只想获取 value,可以使用 values() 方法。
// 引入 HashMap 类
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Apple");
Sites.put(2, "Banana");
Sites.put(3, "Orange");
Sites.put(4, "Peach");
// 输出 key 和 value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
}
}
执行以上代码,输出结果如下:
key: 1 value: Apple key: 2 value: Banana key: 3 value: Orange key: 4 value: Peach Apple,Banana,Orange,Peach,
更多HashMap()方法从API帮助文档均可查到
三、实战
以我个人做过的几个例题进行举例
第一题
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); Set<String> hashset = new HashSet<String>(); for (int i = 0; i < a; i++) { String str=sc.next(); hashset.add(str); } System.out.println(hashset.size()); } }
该题所求出现不同字符串的个数,像第一个字符串{abc}和第三个字符串{abc}一样,所以输出这四个字符串个数{abc,aaaa,abcc,12345}。利用set集合的去重属性,向集合中添加输入的字符串,若输入字符串已在集合中存在,则不会再向集合中添加。
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt();//表示将要输入N个整数 int C = sc.nextInt();//A-B的结果C int[] arr = new int[N]; long sum = 0; int t=0;//计数器 HashMap<Integer, Integer> map = new HashMap<>(); //依次将N个数字输入数组中 for (int i = 0; i < N; i++) { arr[i] = sc.nextInt(); //从哈希表中依次找数字,如果获得的数字为空值,则计数器t=0。 if(map.get(arr[i])==null){ t=0; } else{ t=map.get(arr[i]); } map.put(arr[i],++t); } //A-B=C就相当于 A=B+C for (int i = 0; i < N; i++) { if(map.get(arr[i]+C)!=null){ sum=map.get(arr[i]+C)+sum; } } System.out.println(sum); } }