首页 > 编程语言 >java学习日记20230415-LinkedHashSet源码

java学习日记20230415-LinkedHashSet源码

时间:2023-04-19 22:25:17浏览次数:42  
标签:java name 20230415 add 源码 Employee LinkedHashSet public linkedHashSet

LinkedHashSet全面说明:

  • LinkedHashSet是HashSet子类;
  • 底层是一个LinkedHashMap,底层维护了一个数组和双向链表
  • 根据元素的hashCode值来决定元素的位置,同时使用链表维护元素的次序,使得元素看起来是以插入的顺序保存的
  • 不允许添加重复元素
  • 维护了一个hash表和双向链表,每个节点有pre和next属性
  • 在添加一个元素时,先求hash值,在求索引,确定该元素在hashtable中的位置,已经存在则不添加
  • 可以保证插入顺序和遍历顺序
  • 通过内部类实现LinkedHashMap$Entry 继承HashSet$Node,通过匿名内部类实现;
    查看代码
    package com.study.set_.linkedhashset;
    
    import java.util.LinkedHashSet;
    import java.util.Objects;
    
    /**
     * @author jay
     * @version 1.0
     * @date 2023/4/18
     */
    public class LinkedHashSetMethod {
        public static void main(String[] args) {
            LinkedHashSet linkedHashSet = new LinkedHashSet();
            linkedHashSet.add(new String("AA"));
            linkedHashSet.add("AA");
            linkedHashSet.add("456");
            linkedHashSet.add("456");
            linkedHashSet.add("hsp");
            linkedHashSet.add(new Employee("jack"));
            //LinkHashSet 顺序一致,底层维护的LinkedHashMap
            //第一次添加时,直接扩容16,存放的类型是LinkedHashMap$Entry
            //数组是HashMap$Node[]存放的元素LinkedHashMap$Entry --数组多态
    
            for (Object o :linkedHashSet) {
                System.out.println(o.hashCode());
            }
    
            System.out.println(linkedHashSet);
    
        }
    }
    
    class Employee{
        private String name;
    
        public Employee(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Employee{" +
                    "name='" + name + '\'' +
                    '}';
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Employee employee = (Employee) o;
            return Objects.equals(name, employee.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(name);
        }
    }

标签:java,name,20230415,add,源码,Employee,LinkedHashSet,public,linkedHashSet
From: https://www.cnblogs.com/DragonJack/p/17331433.html

相关文章

  • java数组
    一维数组的定义、使用Java中的数组是类类型。 类型 [数组名[]|[]数组名]  [= [{值1[,值n]*}|new类型[元素数量]]  ]?;  其中,类型没有任何限制,可以是基本类型也可以是类、接口类型。用new创建数组时,系统会自动初始化数组中的所有元素:数组类型赋值0,布......
  • Java基础——常用类
    常用类字符串String//初始化////Stringstr1=newString();初始化一个新创建的String对象,使其表示一个空字符序列。////String(Stringoriginal)初始化一个新创建的String对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。////Strin......
  • melange 基于源码构建apk 包的工具
    实际上melange是apko的相关项目,结合起来可以更好的创建基于apk的oci镜像,melange主要是定义了一套pipeline可以方便的进行apk包开发安装可以基于docker运行 goinstallchainguard.dev/melange@latest使用配置package:name:helloversion:2.12epoch:0description:"the......
  • Java语言编程
    Java编程需要一定的逻辑思维能力,要持续的学习分别有Java/python/C++/CJava能干什么?比如手机应用,游戏(我的世界)大数据分析                 JavaSE数据库前端Javawedssm框架LinuxspringBoot西部开源Java     springclond......
  • 关于报错:Error adding module to project: setSdk: sdk '1.8' type 'JavaSDK' is not
    问题描述:Erroraddingmoduletoproject:setSdk:sdk'1.8'type'JavaSDK'isnotregisteredinProjectJdkTable(图片来自贴吧,看到有一个人问这个问题,然后自己碰到了但是忘了截图)说明当前项目在“ProjectJdkTable”里面是没有配置sdk1.8的。百度翻译过来就是:未在Project......
  • vue2源码-九、异步更新
    异步更新异步更新原因以下情况下:vm.name='123'vm.name='234'vm.name='123'...如果我们频繁的修改一个数据,就会多次触发视图渲染dep.notify->watcher.update这样就会降低性能,因此就需要采用异步更新策略,仅仅在最后执行一次视图更新操作。思路当数据变化时,先......
  • java -- 缓冲流、转换流、序列化流
    缓冲流缓冲流,也叫高效流,按照数据类型分类:字节缓冲流:BufferedInputStream,BufferedOutputStream字符缓冲流:BufferedReader,BufferedWriter缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。字节缓......
  • 分享下之前做的STM32嵌入式Web完整设计教程和案例html,Ajax,Javacript,XML,cgi等
    这段时间好些网友咨询,特此再分享下:http://www.armbbs.cn/forum.php?mod=viewthread&tid=26034如果需要外网也可以访问,此贴:【专题教程第3期】开发板搭建Web服务器,利用花生壳让电脑和手机可以外网远程监控,手机4G访问域名效果:   微信公众号:armfly_com......
  • Java JVM、JNI、Native Function Interface、Create New Process Native Function API
    JavaJVM、JNI、NativeFunctionInterface、CreateNewProcessNativeFunctionAPIAnalysis目录1.JAVAJVM2.JavaJNI:JavaNativeInterface3.JavaCreateNewProcessNativeFunctionAPIAnalysisInLinux4.JavaCreateNewProcessNativ......
  • 功能强大的JavaScript引擎--SpiderMonkey
    JavaScript在浏览器中的应用几乎是尽人皆知的。实际上,JavaScript技术也可以使用在非浏览器应用程序当中,从而让应用程序具有自动的脚本功能。本文介绍了一种功能非常强大的JavaScript引擎SpiderMonkey。这个引擎是Mozilla浏览器的JavaScript引擎。该引擎接口定......