`
FreeWhere
  • 浏览: 3892 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于Set的不确定性

    博客分类:
  • Java
阅读更多

Set是一个不包含重复元素的 Collection。(似乎我在废话)

让我们来看一段代码:

  int a=1,b=2,c=3,d=4,e=5,f=6;

  Set<Collection<Integer>> setClear = new HashSet<Collection<Integer>>();//定义一个用于测试的Set
		ArrayList<Integer> setClearInner  = new ArrayList<Integer>();//定义上述的用于放进Set中的元素

		setClearInner.add(a);
		setClearInner.add(b);
		setClearInner.add(c);
		setClear.add(setClearInner);

		setClearInner.clear();//清除setClearInner内的元素

		setClearInner.add(d);
		setClearInner.add(e);
		setClearInner.add(f);
		setClear.add(setClearInner);

		System.out.println("setClear ========" + setClear.toString());//输出setClear内的元素

		Iterator<Collection<Integer>> it = setClear.iterator();
		Collection<Integer> temp1 = it.next();
		Collection<Integer> temp2 = it.next();
                
  /*比较setClear内的两个元素,比输出它们各自的hash码*/
		System.out.println("equals ========" + temp1.equals(temp2));
		System.out.println("temp1.hashCode() ========" + temp1.hashCode());
		System.out.println("temp2.hashCode() ========" + temp2.hashCode());

 猜一下什么结果。false?看一下:

setClear ========[[4, 5, 6], [4, 5, 6]]
equals ========true
temp1.hashCode() ========33796
temp2.hashCode() ========33796

 没有看错,的确在Set里添加了同一元素!

 

在JDK API对Set的描述有这么一句话:

如果将可变对象用作 set 元素,那么必须极其小心。如果对象是 set 中某个元素,以一种影响 equals 比较的方式改变对象的值,那么 set 的行为就是不确定的。

正是这种不确定性,使我们往Set里添加了同一元素。

 

再看一段代码:

  int a=1,b=2,c=3;
		
		Set<Integer> setClear = new HashSet<Integer>();
		
		setClear.add(a);
		setClear.add(b);
		setClear.add(c);
		
		System.out.println("first:setClear ========" + setClear.toString());
		
		a=2;
		b=3;
		c=4;
		
		setClear.add(a);
		setClear.add(b);
		setClear.add(c);
		
		System.out.println("second:setClear ========" + setClear.toString());

 输出结果为:

first:setClear ========[1, 2, 3]
second:setClear ========[1, 2, 3, 4]

 Set只是添加了它原本没有包含的元素4。

 

说明Set的不确定性只用在对象上,不适合于基本数据类型。换一种说法,往Set里添加基本数据类型,添加的是基本数据类型的值;如果添加的是对象,则添加的时对象的一个引用,对象属性的改变,引起了Set的不确定性。

 

这个问题是在一个技术群里的一个人问起的,我和他讨论解决之后,决定把它发上来大家就流一下。

分享到:
评论

相关推荐

    深度学习的不确定性估计和鲁棒性

    深度学习的不确定性估计和鲁棒性是现代人工智能领域中的关键课题,特别是在那些错误可能造成严重后果的领域,如医疗诊断、自动驾驶和自然语言处理。在这些应用中,模型需要能够识别其预测的不确定性和对异常输入的...

    不确定理论 uncertainty theory

    - **定义**:设{ξn}是一个不确定变量序列,如果存在不确定变量ξ,使得当n趋于无穷大时,不确定变量ξn的不确定性分布趋向于ξ的不确定性分布,则称{ξn}收敛到ξ。 - **性质**:收敛性是分析不确定变量序列行为的...

    深度学习中的不确定介绍

    深度学习中的不确定性介绍 深度学习中的不确定性是指模型在进行预测时的不确定性,包括预测结果的可靠性和置信度。换言之,不确定性是指模型对预测结果的信心程度。例如,在分类任务中,模型可能会输出一个标签和其...

    setres适用小工具

    对于那些系统默认不支持或者隐藏的分辨率,"setres"也能提供支持。 在使用"setres"时,需要注意几个关键点。首先,确保所选分辨率与显卡驱动兼容,否则可能会导致屏幕闪烁、黑屏甚至无法正常启动。其次,不建议频繁...

    LevelSet原理

    Level Set 方法的核心思想是通过一个嵌入函数(embedding function)来表示不连续或者动态变化的界面。这个嵌入函数通常被定义为距离函数,它可以用来追踪边界的变化,并且在计算过程中保持边界的清晰性。这种方法的...

    粗糙集.zip_不确定处理_不确定性处理_模糊粗糙_粗糙集代码_粗糙集理论

    粗糙集理论是一种在不确定性和不完全信息环境下处理知识发现与数据挖掘的数学框架,由波兰科学家Zdzisław Pawlak于1982年提出。这个理论主要应用于决策系统、知识约简、特征选择、分类问题等领域。MATLAB作为一种...

    VOF法与Level Set法的比较

    而Level Set法虽然不需要重构界面,但其计算出的界面可能相对不那么尖锐,而且在界面变化剧烈时需要更复杂的处理以保持计算稳定性。因此,在实际应用中,研究者和工程师需要根据具体问题的特点和需求,选择适当的...

    R_M界面不稳定性LevelSet方法

    ### R_M界面不稳定性LevelSet方法 #### 一、引言 在流体力学领域,界面不稳定性的研究是一项重要的课题,特别是在涉及不同密度流体之间的相互作用时尤为关键。Richtmyer-Meshkov(R-M)不稳定性是其中一种典型的...

    set映射(视频)

    在Java编程语言中,`Set`接口是集合框架的一部分,它继承自`Collection`接口,提供了不允许重复元素的存储功能。在这个主题中,我们将深入探讨`Set`映射的概念,包括其基本原理、用途、以及如何在实际开发中运用。 ...

    rough set

    Pawlak在1982年提出的一种数据分析方法,主要用于处理不确定性、不完全性和模糊性数据。该理论的核心在于能够在保留分类能力的同时进行属性约简,即去除冗余信息并保留关键信息,以便更高效地进行决策或分类。 ###...

    rough set_粗糙集_

    粗糙集理论通过提供一种处理不确定性的框架,帮助我们在数据中识别和提取知识。 粗糙集的核心概念包括: 1. **信息系统**:一个信息系统由对象集(通常代表现实世界中的实体)和属性集组成,每个属性都有可能的...

    粗糙集知识约简的不确定性分析

    粗糙集理论(Rough Set Theory,简称RST)是一种新的不确定性表示方法,其在理论和应用方面都受到了越来越多的关注。在不确定性分析中,特别是大数据时代背景下,不确定性分析已成为智能信息处理的一个核心问题。 ...

    多粒度近似空间的不确定性度量

    本文的标题为“多粒度近似空间的不确定性度量”,是一篇专注于粗糙集理论的研究论文,探讨了多粒度近似空间在解决具有模糊性和不确定性特征的复杂问题中的应用。作者为Guoping Lin、Yuhua Qian和Jiye Liang,他们...

    学学Python_字典14_字典的方法(popitem、setdefault)

    `popitem()`的行为是非确定性的,因为字典内部通常是无序的,所以不能保证每次调用都会移除相同的键值对。在字典为空时调用`popitem()`会引发`KeyError`异常。这个方法在需要从字典中随机抽取元素或清理字典时非常...

    Matlab code of rough set

    - **粗糙集**:在信息系统中,粗糙集是通过上下近似操作来刻画知识的不确定性。上近似包含一个对象集合的所有可能属于某一类的元素,而下近似则包含所有确定属于该类的元素。 - **属性约简**:粗糙集理论中的一个...

    Decision-Theoretic Rough Set Models

    具体来说,该模型考虑了决策过程中的成本因素,比如误判或未作出判断的成本,从而使得模型在不确定性数据处理中更加灵活和实用。 ### 变精度粗糙集模型的特点 变精度粗糙集模型则将参数视为原始概念,这意味着用户...

    set接口经常用的hashCode和equals方法详解

    `Set`接口是一种不允许包含重复元素的集合。根据存储和检索元素的方式不同,`Set`接口有多种实现类,如`HashSet`、`LinkedHashSet`和`TreeSet`等。其中,`HashSet`使用哈希表实现,`LinkedHashSet`则在此基础上保持...

    level set method new

    本文主要讨论了基于水平集方法(Level Set Method)的图像分割技术在处理任意数量区域时的复杂性和解决方案。传统的图像分割方法通常难以有效处理多个区域的情况,而本研究提出了一种新的最小化策略,该策略不仅能够...

Global site tag (gtag.js) - Google Analytics