进阶day03-哈希表以及HashSet中去重复的原理
This commit is contained in:
39
javaSE-day03/src/com/inmind/set02/HashDemo09.java
Normal file
39
javaSE-day03/src/com/inmind/set02/HashDemo09.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package com.inmind.set02;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
/*
|
||||
哈希表以及HashSet中去重复的原理
|
||||
|
||||
Set集合底层的数据结构是哈希表
|
||||
|
||||
哈希表:在JDK8之前,就是数组+链表
|
||||
哈希表:在JDK8之后,就是数组+链表+红黑树
|
||||
|
||||
总结:哈希表通过对象的hashCode和equals方法来实现去重功能的,它能够在实现去重的基础上,还能保证高效查询操作
|
||||
|
||||
如何保证高效,假设有1万条数据,遍历是否包含某个数据,由hashCode值,就排除了8000条数据,只要查询2000条
|
||||
*/
|
||||
public class HashDemo09 {
|
||||
public static void main(String[] args) {
|
||||
String s1 = "abc";
|
||||
String s2 = new String("abc");
|
||||
String s3 = "通话";
|
||||
String s4 = "重地";
|
||||
|
||||
//s1与s2,地址不同,但是内容相同,哈希值也相同,由于String重写了hashCode方法,哈希值跟内容有关
|
||||
System.out.println(s1.hashCode());
|
||||
System.out.println(s2.hashCode());
|
||||
|
||||
//s3与s4,地址不同,内容也不相同,哈希值相同,由于String重写了hashCode方法,哈希值跟内容有关
|
||||
System.out.println(s3.hashCode());
|
||||
System.out.println(s4.hashCode());
|
||||
|
||||
HashSet<String> sets = new HashSet<>();
|
||||
sets.add(s1);
|
||||
sets.add(s2);
|
||||
sets.add(s4);
|
||||
sets.add(s3);
|
||||
System.out.println(sets);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user