1.HashSet集合
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class DemoHashSet {
public static void main(String[] args) {
Set<Integer> ha = new HashSet<>();
ha.add(1);
ha.add(2);
ha.add(3);
ha.add(1);//重复元素不会存入HashSet集合
Iterator ite = ha.iterator();
while (ite.hasNext()){
System.out.println(ite.next());
}
for (int i : ha){
System.out.println(i);
}
}
}
2.Hash值
哈希值:十进制的整数,由系统随机给出(本质为对象的地址值的十进制表达,是一个逻辑地址,不是数据存储的真实物理地址)
在Object类
中存在hashCode
方法可以返回对象的哈希值
public class DemoHash {
public static void main(String[] args) {
Object p = new Object();
int a = p.hashCode();
System.out.println(a);
System.out.println(p);
}
}
相同字符串的哈希值相同
public class DemoHash {
public static void main(String[] args) {
String str1 = new String("asd");
String str2 = new String("asd");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
}
}
字符串“重地”
与“通话”
的哈希值一样(巧合)
3.哈希表结构
3.LinkedHashSet集合:元素按顺序存入集合
原理:底层=哈希表(数组+链表/红黑树)+链表,多了一条链表来记录元素存储顺序
import java.util.HashSet;
import java.util.LinkedHashSet;
public class DemoHashSet {
public static void main(String[] args) {
HashSet<String> str = new HashSet<>();
str.add("asd");
str.add("asd");
str.add("重地");
str.add("通话");
System.out.println(str);
HashSet<String> str2 = new LinkedHashSet<>();
str2.add("asd");
str2.add("asd");
str2.add("重地");
str2.add("通话");
System.out.println(str2);
}
}