架构师数据结构技术day03-集合之set

攻城狮Chova 攻城狮Chova     2022-12-06     608

关键词:

Set

  • Set: 具有元素唯一性.该集合可以知道某个元素是否已经存在于集合中 ,Set中不会存在重复元素
  • Set用于存储不重复的无序元素 ,Set集合中的元素存入和取出的顺序不一定相同

对象相等

  • 引用到堆上同一个对象的两个引用是相等的:
    • 如果对两个引用调用hashCode() 方法,会得到相同的结果
    • 如果对象所属的类没有重写ObjecthashCode() 方法,那么hashCode() 方法会返回每个对象特有的hashCode值.这两个对象的hashCode值是不相等的
  • 要使得两个不同的对象相等:
    • 要重写Object中的hashCode() 方法和equals() 方法
    • 因为Object中的hashCode() 方法返回的对象的内存地址,所以必须重写hashCode() 方法才能保证两个不同的对象具有相同的hashCode值,同时也需要两个不同的对象调用equals方法返回true

HashSet

  • Hash表中存放的是哈希值hashcode
    • HashSet中存储的元素是无序的
    • HashSet存储元素的顺序不是按照存入时的顺序而是按照hashcode的顺序存储元素的
    • 所以读取元素也是按照hashcode顺序
  • HashSet通过使用hashcodeequals来保证不存入重复的元素:
    • HashSet通过元素的hashcode()equals() 方法来判断元素是否重复
    • HashSet首先获取对象的hashcode值来得到对象的加入位置,同时和其余元素的hashcode值进行比较,如果不同元素的hashcode值不相等,那么就认定这两个对象就是不同的元素,将元素加入到HashSet
    • 如果多个元素的hashcode值相同,就继续使用equals() 进行比较.如果equals() 返回true. 那么就认定这两个对象是相同的元素,加入HashSet失败
    • 如果多个元素的hashcode值相同,继续使用equals() 进行比较 ,equals() 返回false. 那么这两个对象不是同一个元素.这样的hashcode值相同equals() 方法比较为fasle的两个元素会在同一个hashcode值下顺延,可以认为两个hashcode值相同的元素存储在一个哈希桶中
  • 哈希桶: 一个hashcode值的位置上可以存放多个元素
  • 自定义类对象时需要重写对象的hashcode() 方法,确保对象具有相同的hashcode

TreeSet

有序性

  • TreeSet中存储的元素是有序的
  • TreeSet中元素的排序规则:
    • 存入的元素自定义比较规则
      • 元素自身具备比较性
      • 元素实现Comparable接口,重写compareTo() 方法.使得元素自身具备了比较性
      • 这种方式称做元素的自然排序.默认排序方式
    • 指定TreeSet的比较规则
      • 元素自身不具备比较性,或者是自身具备的比较性不是排序所需要的比较性.此时可以使得容器本身具备比较性
      • 定义一个类实现Comparator接口,重写compare() 方法,并且将接口的子类实例对象作为参数传递给TreeMap集合的构造方法
  • 注意:
    • 同时使用ComparableComparator两种比较方式时,以Comparator的比较方式为主
    • 重写compareTo() 方法和compare() 方法时,必须要明确比较的主要条件相等时要比较的次要条件
    • 存入TreeSet中的元素要具备比较性

唯一性

  • TreeSet属于Set集合,集合中的元素是不能重复的
  • TreeSet中保证数据的唯一性:
    • TreeSet通过compareTo() 方法或者compare() 方法来保证元素的唯一性
    • TreeSet中加入的元素实现Comparable接口或者Comparator接口,当使用compareTo() 方法或者compare() 方法比较返回值为0时,说明两个对象相等,也就是两个元素重复,元素不会加入到TreeSet

LinkedHashSet

  • LinkedHashSet会保证元素的插入顺序
  • LinkedHashSet中的元素按照元素的插入顺序排序

总结

  • Array => 索引位置
  • Link => 插入的第一个元素fisrt, 插入的最后一个元素last
  • Hash => 对象的hashcodeequals() 方法
  • Tree => 比较接口Comparable和比较接口Comparator

day013--set(增删改查关系)

set集合是一个无序的,不重复的数据组合,它的主要作用如下:去重,把一个列表变成一个集合,就自动去重了关系测试,测试两组数据之间的交集、差集和并集等关系集合中的元素有三个特征:1.确定性(元素必须可hash)2.互异... 查看详情

架构师技术栈——对标阿里p10

顶端企业架构师十项全能软件架构导论架构师核心能力架构设计原则架构设计核心维度架构设计模式架构设计评估分布式架构理论微服务架构设计核心单元化(Set)架构设计服务网络架构设计DDD领域驱动架构设计安全架... 查看详情

java集合之整体架构

...框架总结  Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumer... 查看详情

java集合系列15之set架构

...Map实现的,TreeSet是通过TreeMap实现的)。首先,我们看看Set架构。 (01)Set是继承于Collection的接口。它是一个不允许有重复元素的集合。(02)Abstra 查看详情

day03-集合

一、概述集合是无序的,天生不重复的数据组合,它的作用如下:去重,即:把一个列表变成集合,就去重了关系测试,即:测试两组集合的交集、并集和差集等二、语法1>>>name_1=[1,2,3,4,7,8,7,10]23#把列表转换为集合4>>&... 查看详情

set集合之hashcode()和equals()

packagecom.day15.Set;/**set集合中的元素不能重复(唯一性),也没索引,存取无序*/importjava.util.HashSet;importcom.day15.bean.Person;publicclassHashSet_One publicstaticvoidmain(String[]args)   /*HashSet<String>hs=newHa 查看详情

java集合之collection架构

Java集合之Collection架构首先,我们对Collection进行说明。下面先看看Collection的一些框架类的关系图:  Collection是一个接口,它主要的两个分支是:List 和 Set。List和Set都是接口,它们继承于Collection。List是有序的队列,Lis... 查看详情

1.软件架构设计:大型网站技术架构与业务架构融合之道---五花八门的架构师职业(代码片段)

第1部分什么是架构 硬: 语言,数据结构与算法,操作系统原理,某种框架或中间件原理与使用方式。 软: 软件建模,架构设计等。 显性问题: 高并发,高可用,数据一致性问题。 隐形问... 查看详情

day03

集合是一个无序不重复元素集,基本功能包括关系测试和消除重复元素.集合对象还支持并、交、差、对称差等。list_1=[1,2,6,4,8,7,8]list_2=[5,7,8,3,4]s1=set(list_1)s2=set(list_2)print(s1){1,2,4,6,7,8}将列表转成集合,并去重集合运算操作数学含... 查看详情

it架构师绝对不能错过的34张史上最全技术知识图谱

架构师图谱Java架构师图谱微服务架构秘籍 一致性图谱互联网大流量的方法安全秘籍阿里巴巴常用小框架架构方法论图谱设计模式秘籍图谱 JVM虚拟机垃圾回收图谱Java并发图谱Java集合图谱Java集合类图JavaList类图JavaMap类图Ja... 查看详情

奈学教育《百万架构师》课程大纲

第一阶段:基础架构设计与实践之道篇第一单元通过架构演进掌握架构设计核心思维模式智能互联网之总体架构设计(上)第二单元通过架构演进掌握架构设计核心思维模式智能互联网之总体架构设计(下)第三单元掌握高可用架构... 查看详情

一名工作8年的java架构师分享经验之如何成为一名架构师

...瓶颈不知道怎么去突破,其实这个时候就要冲破传说中的架构师。架构师是个很神秘人物,那么架构师的技术一般在什么程度呢?怎样才能被称为架构师?技术深度有没有看过JDK源码,看过的类实现原理是什么。HTTP协议TCP协议... 查看详情

软件架构师之举止沟通

...敌,只要告诉他“是你错了”。这个办法屡试不爽。作为架构师,或者这是你所努力的一个目标,那么你需确定的一点就是,你需要和单位中的各种人等打交道。调动所有人积极性的最好办法之一是你在任何环境中都举止文雅、... 查看详情

集合day8

一,集合。集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:  去重,把一个列表变成集合,就自动去重了。 ... 查看详情

java培训之如何成为架构师?

Java培训之如何成为架构师要成为Java架构师,应该具备多方面的知识技能,特别重要的是,一定要有多个实际项目经验。需要的工作年数和个人能力有关,一般来说3到5年吧。拿Web服务开发为例,为了满足实际需求,项目功能和... 查看详情

资源工具分享(第1期):后端架构师技术图谱

...java-books从初级开发者到资深架构师,看这些书就够了数据结构队列集合链表、数组字典、关联数组栈树二叉树完全二叉树平衡二叉树二叉查找树(BST)红黑树B,B+,B*树LS 查看详情

架构师的技术升级之路

参考技术A这篇文章更多的是从沟通角度分析架构师的升级之道。但我们知道,架构师更多是靠技术拿高薪。在本文里,我将列些我见到的技术架构平时需要解决的问题,有技术的,也有沟通协调方面的,以这些实实在在的案例... 查看详情

架构师是做什么的?如何成为专职架构师

架构师按照专注领域不同,可分为企业架构师、基础结构架构师、特定技术架构和解决方案架构师等,专职架构师往往偏向基础结构架构师和特定技术架构师,专职架构师不负责具体的业务系统,而又对所有的系统负责,很少直... 查看详情