一. 定义
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
HashSet继承AbstractSet类, 实现Set, Cloneable, Serializable接口, 其中AbstractSet提供Set接口的骨干实现, 从而最大限度的减少了实现此接口所需的工作. Set接口是一种不包括重复元素的Collection, 它维持自己内部的排序, 所以随机访问没有意义.
HashSet不能添加重复的元素, 当调用add(Object)方法的时候
首先会调用Object的hashcode方法判断hashcode是否已经存在, 如果不存在则直接插入元素;
如果已经存在则调用Object对象的equals方法判断是否返回true, 如果为true则说明元素已经存在, false则插入元素
二. 例题
题目 :
牛牛有一个由小写字母组成的字符串s, 在s中可能由一些字母重复出现. 他不喜欢重复, 对于同一个字母, 他指向保留第一次出现并删除掉后面出现的字母. 例如: 输入banana 输出ban
解答:
public class RemoveDumplicateString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String string = sc.next();
System.out.println(process(string));
}
private static String process(String s) {
int n = s.length();
HashSet<Character> set = new HashSet<>();
String result = "";
for (int i = 0; i < n; i++) {
if (!set.contains(s.charAt(i))){
set.add(s.charAt(i));
result += s.charAt(i);
}
}
return result;
}
}