HashSet集合的介绍和哈希值
java.util.Set接口 extends Collection接口
Set接口的特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
java.util.HashSet集合 implement Set接口
hashset特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
3.是一个无序的集合,存储元素和取出元素的顺序有可能不一样
4.底层是一个哈希表结构(查询速度非常的快)
代码:
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
//使用add方法往集合中添加元素
set.add(1);
set.add(3);
set.add(2);
set.add(1);
//使用迭代器遍历set容器
//获取迭代器
Iterator<Integer> iterator = set.iterator();
while(iterator.hasNext()){
Integer next = iterator.next();
System.out.println(next);//1 2 3
}
//增强for循环遍历set集合
for (Integer integer : set) {
System.out.println(integer);
}
}
哈希值
/**
* 哈希值:是一个十进制的整数,由系统随机给出(对象的地址值,是一个逻辑地址,是一个模拟出来的地址,不是数据实际存储的物理地址)
* 在Object类中有一个方法它可以获取对象的哈希值
* int HashCode() 返回该对象的哈希码值
* hashCode方法的源码: public native int hashCode();
* native 代表该方法调用的是本地操作系统方法
*/
public class Test {
public static void main(String[] args) {
//Person继承了Object,所以可以使用Object中的hashCode方法
Person person = new Person();
int i = person.hashCode();
System.out.println(i);//1950409828
Person person2 = new Person();
int i2 = person2.hashCode();
System.out.println(i2);//1229416514
//String类的哈希值
String str = "abcd";
String str1 = "abcd";
int code = str.hashCode();
int code1 = str1.hashCode();
System.out.println(code);//2987074
System.out.println(code1);//2987074
System.out.println(str == str1);//true
System.out.println("===========");
System.out.println("重地".hashCode());//1179395
System.out.println("通话".hashCode());//1179395
System.out.println("重地"=="通话");//false
}
}
class Person extends Object{
//重写HashCode方法
@Override
public int hashCode() {
return super.hashCode();
}
}