Java中Set接口及其实现

不止是打字机效果:手把手教你用SpannableStringBuilder打造Android富文本AI对话界面 本文详细介绍了如何使用SpannableStringBuilder在Android平台上构建专业级AI对话界面,涵盖流式文本处理、富文本解析、交互优化等核心技术。通过实战代码示例,帮助开发者实现类似DeepSeek的AI产品交互效果,提升用户体验和应用专业度。 阅读详情

Set接口及其实现
1.Set接口
  Set是对数学上集的抽象,Set中不包含重复的元素.如何界定是否是重复元素?Set最多可含一个null元素;对于任意的非null元素e1和e2,都满足e1.equals(e2)==false.
  Object.hashcode()的约定:
a.在程序的一次执行中,无论何时在同一个java对象上重复调用hashcode(),都必须一致地返回同一个整数值,并不像Object.equals()那样提供Object是否被修改了的信息,但这个整数值不必在同一个应用程序的多次运行之间保持一致.
b.如果两个Object通过equals()判断是相等的,那么,在这两个Object上调用hashcode()必返回相同的值.
c.如果两个Object通过equals()判断是不相等的,那么,并不要求这两个Object.hashcode()返回不同的整数值.
  集合操作:
   并         s1.addAll()原
   交         s1.retainAll(s2)原
  非对称差    s1.remove(s2)
  对称差      Set symmetricDiff = new HashSet(s1);
              symmertricDiff.add(s2);
              Set tmp = new HashSet(s1);
              tmp.retainAll(s2);
              symmertricDiff.removeAll(tmp);
              则,symmertricDiff即为s1和s2的对称差.
  相对补      Set relativeCompl = new HashSet(s1);
              Set tmp = new HashSet(s1);
              tmp.retainAll(s2);
              relativeCompl.removeAll(tmp);
              则,relativeCompl称为s2的相对补. 
2.Set实现
  HashSet是使用一个哈希表存储元素的,是非排序的,可以随机访问,是Set的最优性能实现.TreeSet实现了SortedSet接口,使用一个红黑树来存储元素,提供了元素的有序存储和访问.
  2.1 HashSet
  HashSet在底层实现上依赖于HashMap.
    HashSet的代码片断:
  // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

    public HashSet() {
 map = new HashMap<E,Object>();
    }

    public boolean add(E o) {
 return map.put(o, PRESENT)==null;
    }

    public boolean remove(Object o) {
 return map.remove(o)==PRESENT;
    }

    public boolean contains(Object o) {
       return map.containsKey(o);
    }
从代码可见,HashSet在底层借用HashMap,使用一个Object类型的哑元值作为HashSet中元素在底层HashMap存储中的映射值.它抓住了HashMap的键不允许重复的特性.对于add()中调用底层映射的put(),将欲添加的元素和一个PRESENT哑元值放入底层map.如果底层Map返回null,说明原来的集合中并不存在该键.对于Map接口的put()返回null时有两种解释,一是原来的Map中不包含该键;另一种可能是原来的Map中已经存储了该健,但该键映射到null.而在HashSet中的add()和remove()等中的返回null只有一种解释,即原来的集合不包含该元素.这是因为HashSet的底层的映射中存储的都是一个名为PRESENT的Object类型的对象,不可能是null.
 
  2.2 TreeSet
   Set接口有一个子接口:SortedSet,提供了集合元素的顺序存储,其中元素保持升序排列.为了在加入一个元素到SortedSet实现时能对这些元素排序,元素类型必须实现Comarable接口,或者建立SortedSet时使用Comparator.否则程序在运行时将抛出ClassCastException.
3.使用Set的注意事项
  如果Set中存储了可变对象,当这些对象出现重复元素,从而从根本上违反了Set的约定,Set的行为也变得不确定.所以,在Set中存储可变对象时,一定要十分小心.同样,对于Map中的key也一样,因为Map中的key也是不允许重复的.
    //DupEleSet.java
  class DupEleSet{
   public static void main(String [] args)
   {
        Calendar cld=new Calendar.getInstance();
       cld.set(2003,0,1);

        Date d1 = cld.getTime();

        cld.set(2005,10,2);
       Date d2 = cld.getTime();

         Set s = new HashSet();
          s.add(d1);
          s.add(d2);

          System.out.println("before modify:"+s);

          d1.setTime(d2.getTime());

            System.out.println("after modified:"+s);

        }
     }
上面的程序输出:
  before modify:[Wed Jan 01 21:54:19 cst 2003,Thu Nov 02 21:54:19 cst 2000]
  after modifyied:[Wed Jan 01 21:54:19 cst 2000,Thu Nov 02 21:54:19 cst 2000]

C语言实现惯导更新算法(机械编排) 四元数可用于描述刚体转动或姿态变换,与方向余弦阵相比,表达简洁。四元数是一个包含四个元素的列向量,列向量的第一个元素表示刚体围绕旋转轴转过的角度大小,其余3个元素代表了旋转轴的方向。 阅读详情

相关推荐

Agent应用实践之三 - 基础:AgentScope-ReActAgent源码解析

本章通过总结AgentScope的核心类,再通过分析ReActAgent调用大模型的底层源码原理。使我们基本了解了Agent的基本原理,这个实现方式与OpenClaw使用pi-mono的Agent基础框架是一致的。了解完ReActAgent的基本原理,下一章我们会将一下SpringBoot集成方式的代码原理,这两章是我们构建后续内容的基本框架。

代码让AI扣 433

Set接口详解

Set 接口Java 集合框架中的一种数据结构,它继承自 Collection 接口,用于存储一组唯一的对象,即不允许重复的元素。Set 接口中的元素不按特定的方式排序,但它提供了基于对象的相等性来确定元素是否重复的方法。即如果集合中已经存在一个等于新加入元素的对象,则新元素不会被添加到集合中。Set 接口Java 集合框架中有多种实现,其中最常用的是 HashSet 和 TreeSet。HashSet 实现是基于哈希表的,具有高效的添加、删除、查找操作;

上班摸鱼,下班躺平 1098

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

Set接口介绍

文章目录前言一、Set接口:1.Set接口特点:2.Set实现类:Set接口提供的方法API:二、HashSet1.HashSet的特点:2.HashSet的属性:3.HashSet的构造函数:4.HashSet方法:三、LinkedHashSet:1.LinkedHashSet的特点:2.LinkedHashSet的继承关系和构造器:3、LinkedHastSet的应用场景:四、TreeSet1.TreeSet的特点:2.属性:3.构造器方法总结 前言 Set接口是Collection接口的子类,..

liangcheng0213的博客 3976

第十四章 集合(Set

一、Set 接口 | 二、HashSet 接口 | 三、LinkedHashSet 接口 | 四、Map 接口和常用方法 | 五、Map 接口实现类 | 六、如何选择集合实现类(TreeSet、TreeMap) | 七、Collections 工具类 |

yirenyuan的博客 1023

为何有时候HashSet输出会有序?浅析HashSet底层是如何“排序”的

问题再现 我们都知道Set集合是无序的。此处的无序体现在,一般情况下,输出顺序和输入顺序不同。并且“毫无规律”(先挖个坑,后面解释)。比如如下代码: Set<Integer> s = new HashSet<>(); s.add(37); s.add(16); s.add(4); s.add(23); s.add(1); s.add(6); ...

t313732838的博客 1947

Java集合(六)Set接口和常用方法

(1)无序(添加和取出的顺序不一致),没有索引(2)不允许重复元素,所以最多包含一个null(3)JDK API中Set接口实现类有:EnumSetHashSetTreeSetSet接口的常用方法:和List接口一样,Set接口也是Collection的子接口,因此,常用方法和Collection接口一样Set接口的遍历方式:同Collection的遍历方式一样,因为Set接口是Collection接口的子接口1.可以使用迭代器2.增强for3.不能使用索引的方式来获取。

超级程序诞生的博客 1614

Java集合总结系列:Set接口及其实现

一、Set接口 Set 接口与 List 接口相比没有那么多操作方法,比如: 1、List 接口能直接设置或获取某个元素的值,而Set接口不能。 2、List 接口能直接在指定位置删除、增加元素,而Set接口不能。 3、List 接口有 listIterator 方法,可以获得 ListIterator 对象,而 Set 接口不能。Set 只能通过 iterator 迭代的方式获取元素。 对比一下...

天射手座的博客 277

java set实现_3.Java集合总结系列:Set接口及其实现

一、Set接口Set 接口与 List 接口相比没有那么多操作方法,比如:1、List 接口能直接设置或获取某个元素的值,而Set接口不能。2、List 接口能直接在指定位置删除、增加元素,而Set接口不能。3、List 接口有 listIterator 方法,可以获得 ListIterator 对象,而 Set 接口不能。Set 只能通过 iterator 迭代的方式获取元素。对比一下Set接口...

weixin_33838871的博客 197

JavaSet接口及其实现

JavaSet接口及其实现Set接口是Collection的子接口Set接口类似于数学上集合的概念,不允许有重复的元素 Set接口没有定义新的方法,只有从Collection上继承的方法 Set接口有三个常用的实现类:HashSet,TreeSet,LinkedHashSet 下面是HahSet实现的例子 import java.util.HashSet; import java.util.Set; /** * Set接口是Collection的子接口Set接口类似于数学上集合的概念,

nuist_NJUPT的博客 861

Java Set接口及其常用实现类详解

是一个有序的集合,它的作用是提供一个有序的Set对象,它内部是基于红黑树实现的。接口的一个常用实现类,它基于哈希表(实际上是一个HashMap实例)实现接口Java集合框架中占据着重要地位,它的实现类提供了多种处理不重复元素集合的方式。每种实现类都有其独特的用途和性能特点,理解它们之间的差异有助于编写更加高效和健壮的代码。这些方法对于处理集合非常有用,可以在各种场景中使用它们来查询集合的状态或修改集合的内容。接口提供了一种存储不重复元素集合的方式,并且有多种实现类可供选择,以满足不同的需求。

yokeyhui的博客 1282

Java单例集合下set接口及其常用实现

**这篇紧接着上一篇继续介绍Java单例集合下的接口及其实现类; 上一篇已经介绍完了Java单例集合下的List接口,现在简单介绍一下Java单例集合下的set接口及其常用实现类。七.Set集合接口Set接口: 如果是实现Set接口的集合类,具备的特点:无序,不可重复。 无序: 添加元素 的顺序与元素出来的顺序是不一致的。 不可重复: 注重独一无二的性质,该体系

My_Obsession的博客 2694

Java Collection接口的子接口Set接口及其Set接口的主要实现类HashSet,LinkedHashSet,TreeSet详解

一、Set接口的框架: 1.Collection接口:单列集合,用来存储一个一个的对象 2.Set接口存储无序的,不可重复的数据 ,说白了就是高中讲的"集合" 3.HashSet接口:作为Set接口的主要实现类,线程不安全的,可以存储null值 4.LinkedHashSet:作为HashSet的子类,遍历其内部数据时,可以按照添加的顺序进行遍历。 对于频繁的遍历操作,LinkedHashSet效率高于HashSet 5.TreeSet接口:可以按照添加对象的指定属性,进行排序。 二、Set集合的无序性与

路宇的博客 739

JavaSet接口及其实现类(面试题)

Set接口中没有额外定义新的方法,使用的都是Collection接口中声明过的方法。

豆恭梓的博客 584

Java学习笔记】Set接口及其实现

目录 1.Set接口概述 2.HashSet集合 2.1 概述 2.2 HashSet如何保证元素唯一性 2.3 HashSet案例 ​​​​​​​3.LinkedHashSet集合 4.TreeSet集合 4.1TreeSet存储Integer类型的元素并遍历 4.2 TreeSet存储自定义对象并遍历 1.Set接口概述 一个不包含重复元素的Collection。 2...

我们仨 573

Java Set接口及其实现

Set接口set存储元素是无序不可以重复的,元素是否重复是依据元素自身equals比较进行判定的。 Set接口有两个实现类: 散列集合:HashSet(Hash算法) 树集合:TreeSet(二叉树算法) 因为set接口也是Collection的子接口,所以也可以使用Collection实现的所有方法,其中常用的有: 添加:add() 删除:remove() 检查元素是否存在:contains(Object o) 迭代器:iterator() 1、TreeSet:树状集合、存放有序 语法:Set&

单枪匹码 860

深入解析Java中的Set接口

在数据结构和算法的世界里,确保集合中元素的唯一性是一个常见的需求。Java 提供了 Set 接口来满足这一需求,它继承自 Collection 接口,并进一步限制了不能包含重复元素。本文将深入探讨 Set 接口的核心概念、常见实现及其应用案例,帮助开发者更好地理解和利用这一强大的工具。

2301_77163982的博客 1343

Java 基础 – Java 集合框架之 Set 接口

Set 接口Java 集合框架中的一个核心接口,它继承自 Collection 接口,位于 java.util 包。

TwoYellowGuns的博客 905

Set接口

Set是Collection子接口Set和Collection基本上一样,一点除外:Set无法记住添加的顺序,不允许包含重复的元素。当试图添加两个相同元素进Set集合,添加操作失败,add()方法返回false。Set判断两个对象是否相等用equals,而不是使用==。也就是说两个对象equals比较返回true,Set集合是不会接受这个两个对象的。常用子类:HashSet:散列存放TreeSe...

378

java集合之常用集合类

目录UML图是什么: list集合:list集合的实现类:ArrayListLinkedListVector——一般情况不推荐使用原因如下:CopyOnWriteArrayList——和Vector不同且推荐使用ArrayList使用remove的注意点set集合:set集合的实现类:HashSet思考:如何对使用hashSet对List容器中的元素去重?思考:如何给hashSet集合中的对象元素去重?思考:如何给HashSet设置初始容量,和负载因子?思考:为什么set集合不能通过先ArrayList中的

qq_62881798的博客 959

集合——Set接口

【1】List接口的特点:不唯一,有序Set接口的特点:唯一,无序(这个无序是相对List接口来说的,无序不等于随机)【2】Set接口没有和索引相关的方法,所以不能用普通for循环遍历这样我们就可以看到Set接口的遍历方法就是:(1)增强for循环(2)迭代器。【3】面试题:在Collection接口下的List接口Set接口有什么区别:(1)接口特点:List接口是不唯一,有序的。

m0_68519425的博客 305

Java基础——Set接口

Collection接口Java中所有集合的总接口,Collection将集合划分为两大类:List集合和Set集合。 1.Set接口 Set集合用来存储数据时的特点: 1)无序的 2)存储数据时,不可重复 Set接口下面的常用方法 增加:add(Object obj):向Set集合中添加元素,添加成功返回true,否则返回false 删除:remove(Object obj) : 删除Set集合中的元素,删除成功返回true,否则返回false。 判断是否为空:isEmpty() :如果

qq_48060243的博客 2051

distributed systems concepts and design

distributed systems concepts and design 希望对你有帮助

登录海康威视进行预览,以及进行人脸识别抓图,保存在picture下.zip

登录海康威视进行预览,以及进行人脸识别抓图,保存在picture下

上一篇: Java中Map接口及实现
下一篇: 字符编码详谈
hillMover
博客等级 码龄22年 1粉丝 32原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值