Java语言之Set接口

一,概述

java.util.Set接口 extends Collection接口,是一个不包含重复元素的Collection集合。
特点
1,不允许存储重复元素;
2,没有索引,没有带索引的方法,所以不能使用普通for 循环遍历。

二,HashSet集合

java.util.HashSet集合 implements Set接口。
特点
1,不允许存储重复元素;
2,没有索引,没有带索引的方法,所以不能使用普通for 循环遍历;
3,是一个无序集合,存储元素和取出元素顺序可能不一致;
4, 底层是一个哈希表结构(查询速度非常快)。

哈希值:是一个十进制整数,由系统随机给出(就是对象的地址值,是一个模拟出来的逻辑地址,不是数据实际存储的地址值)。
在Object类有一个hashCode()方法,,可以获取对象的哈希值。

package day5_03;

public class Person extends Object {
    /*
    public native int hashCode();
    native:该方法调用本地操作系统的方法。
    */
    @Override
    public int hashCode() {
        return 1;
    }
}

package day5_03;

public class DemohashCode {
    public static void main(String[] args) {
        Person p = new Person();
        Person p2 = new Person();
        int p_addr = p.hashCode();
        int p2_addr = p2.hashCode();
        System.out.println(p_addr); //1967205423  | 1
        System.out.println(p.toString()); //day5_03.Person@75412c2f  | day5_03.Person@1
        System.out.println(p2_addr);  //1967205423

        //String类重写了hashCode方法
        String str1 = new String("abc");
        String str2 = new String("abc");
        System.out.println(str1.hashCode()); //96354
        System.out.println(str2.hashCode());  //96354
        System.out.println(str1.hashCode() == str2.hashCode()); //true
        System.out.println(str1 == str2); //false

        System.out.println("通话".hashCode()); //1179395
        System.out.println("重地".hashCode()); //1179395

    }
}
三,哈希表数据结构

HashSet集合存储的数据结构:哈希表。
jdk1.8版本之前:哈希表=数组+链表;
jdk1.8版本之后:哈希表=数组+链表/红黑树(提高查询效率);

数组结构:把元素进行分组(相同哈希值元素分为一组);
链表/红黑树结构:把相同哈希值元素连接到一起。

在这里插入图片描述

四,LinkedHashSet集合

java.util.LinkedHashSet集合 extends HashSet集合。
LinkedHashSet集合特点:
底层是一个哈希表(数组+链表/红黑树)+ 链表:多了一条链表(记录元素存储顺序),保证元素有序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值