- 浏览: 748054 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (419)
- 杂软粉墨 (2)
- 创意灵感 (3)
- 经验记录 (137)
- 开源轨迹 (2)
- sip-communicator (2)
- 闲侃杂谈 (8)
- 问题交流 (24)
- 概念模式 (32)
- 难点备案 (5)
- JwChat (1)
- 中国象棋 (1)
- 教育探索 (6)
- 英语研究 (58)
- 星际争霸 (1)
- 电信知识 (1)
- 软件架构 (3)
- 哲学探索 (26)
- 算法灵魂 (8)
- 近视探索 (6)
- 数学数学 (3)
- 牛角钻尖 (23)
- 至强文言 (3)
- 数据结构 (1)
- 宇宙物理 (2)
- 网络架构 (3)
- 游戏领域 (4)
- 图形处理 (2)
- 修炼之路 (8)
- 读书天地 (20)
- 编解乱码 (2)
- 概念探索 (8)
- 格物致知 (1)
- 其它语言 (1)
- 测试领域 (3)
- 文化风流 (1)
- JQuery (1)
- 網頁領域 (1)
- Unix/Linux (1)
- Inside JVM (1)
- 异常分析 (1)
最新评论
-
suyujie:
引用
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
iamzhoug37:
您能说一下"局部变量不受文本顺序限制" 是 ...
声明前为什么能赋值却不能输出,都是使用
import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; import javax.swing.JFrame; public class Test extends JFrame { public static void main(String[] args) { SortedSet<MarkNode> ss = new TreeSet<MarkNode>(); MarkNode mn1 = new MarkNode(); mn1.m_strID = "111"; ss.add(mn1); MarkNode mn2 = new MarkNode(); mn2.m_strID = "2"; ss.add(mn2); MarkNode mn3 = new MarkNode(); mn3.m_strID = "3"; ss.add(mn3); MarkNode mn4 = new MarkNode(); mn4.m_strID = "111"; ss.add(mn4); MarkNode mn5 = new MarkNode(); mn5.m_strID = "2"; ss.add(mn5); Iterator<MarkNode> it = ss.iterator(); System.out.println("The elements in the TreeSet:"); while(it.hasNext()) System.out.print(it.next().m_strID + " "); System.out.println(); if(mn1.equals(mn4)) System.out.println("mn1 equals mn4"); System.out.println("does mn1 and mn4's hashcode equal: " + (mn1.hashCode() == mn4.hashCode())); System.out.println("mn1 compared to mn4: " + mn1.compareTo(mn4)); } } class MarkNode implements Comparable<MarkNode> { public String m_strID; public double m_dDist; public int m_iRank; public int compareTo(MarkNode arg0) { System.out.println("this = " + this.m_strID + " compare = " + arg0.m_strID); if(!m_strID.equals(arg0.m_strID)) { return 1; } return 0; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((m_strID == null) ? 0 : m_strID.hashCode()); return result; } @Override public boolean equals(Object obj) { if(m_strID.equals(((MarkNode)obj).m_strID)) return true; return false; } }
结果:
this = 2 compare = 111
this = 3 compare = 111
this = 3 compare = 2
this = 111 compare = 2
this = 111 compare = 3
this = 2 compare = 2
The elements in the TreeSet:
111 2 3 111
mn1 equals mn4
does mn1 and mn4's hashcode equal: true
this = 111 compare = 111
mn1 compared to mn4: 0
看此句:
this = 111 compare = 111
出现在TreeSet所含元素打印结果之后,不知道什么原因,应该和111没有去重有关
初步原因找到:
看出来一些问题,在equals和hashCode都满足要求之后,无法去重是因为compareTo的实现关系,实现中compareTo只返回字符串 比较大于或者等于的结果,这样会影响到内部TreeMap的元素比较判断,因为大于,只会往右子树方向比较,会忽略左子树元素,原本相重的元素没有比较到 也就没有去重,这些看TreeMap中public V put(K key, V value)方法实现可以看出
public int compareTo(MarkNode marknode) { System.out.println("this = " + this.m_strID + " compare with " + marknode.m_strID); return this.m_strID.compareTo(marknode.m_strID); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((m_strID == null) ? 0 : m_strID.hashCode()); return result; } @Override public boolean equals(Object obj) { if(m_strID.equals(((MarkNode)obj).m_strID)) return true; return false; }
compareTo正确实现之后貌似又不需要重写equlas和hashCode也能去重了
关于TreeMap中put方法研究:
http://dracularking.iteye.com/blog/691706
发表评论
-
RuntimeException为啥不用声明抛出?
2012-11-13 15:04 7466异常,错误都是同一种父类:java.lang.Throwabl ... -
why null is allocated on java stack
2012-06-05 11:45 1191提问: 恩。。。俺的意思是, String str = n ... -
关于Java 泛型 ?extends T 的问题
2012-05-21 11:05 4361http://topic.csdn.net/u/2012051 ... -
HashSet的contains方法de解释是不是有问题
2011-02-20 22:27 3269first of all, exhibits the code ... -
hashcode中选择31因子的原因
2010-12-24 13:57 1481源自<<effective java 2nd> ... -
为什么AnonymousInnerClass只能访问final型非同一方法局部变量
2010-09-13 09:39 1447import java.io.IOException; im ... -
URLConnection访问servlet无反应
2010-07-26 09:28 2679这样完整的回路是ok的 客户端 import jav ... -
This is how scientists see the world
2010-07-14 15:36 1014有些东西不清楚,比如右上角什么东东,中间那个看似压强C, ... -
接口能描述成has-a吗
2010-07-10 10:19 1335接口has a什么呢? 如果说接口当作具备某种能力来用,比如X ... -
关于java.util.ResourceBundle
2010-07-05 14:17 4354import java.util.ResourceBundle ... -
ArrayList,Vector线程安全性测试
2010-06-18 09:43 3214import java.util.ArrayList; im ... -
这个静态内部类实现的单例是迟加载且线程安全的吗?
2010-05-28 13:10 1633public class JiveProperties { ... -
double-checked locking实现的单例模式之volatile
2010-05-26 17:23 3512private volatile static Singlet ... -
死锁的例子描述对吗
2010-05-10 11:20 1106public class Deadlock { stati ... -
java中Adapter是什么概念
2010-04-06 11:30 4945Adapter乃适配器, ... -
编码转换会丢失信息吗
2010-03-09 13:13 1256编码转换会丢失信息吗? 这是个命题,根 ... -
文本文件在系统中的存储与展现方式
2010-02-04 09:38 1136碰到了一个问题,同样的一个properties ... -
servlet如何实现多线程访问同一个实例的多个service方法
2009-12-09 11:22 1625如题,这是我现在想的一个问题,暂存于此,它同一个方法的 ... -
构造方法是静态的吗?
2009-12-03 15:13 1435public class Test { private ... -
关于JTextPane读取RTF多出一行的问题
2009-11-11 11:20 2469代码如下: import java.io.FileInput ...
相关推荐
Redis中的Sorted Set(有序集合)是一个非常重要的数据结构,它结合了Set(集合)的数据特性与Score(分数)的功能,可以实现对集合元素的排序。本文将深入探讨Sorted Set的基本概念、操作命令以及实际应用场景。...
在这个实战项目中,我们将深入探讨Redis有序集合类型(SortedSet)的常用命令,并通过Java实现商品管理功能,包括增删改查和分类查找,以及根据浏览量进行排序。 首先,我们来了解下Redis有序集合的基础知识。有序...
总之,Set集合提供了存储不重复元素的能力,HashSet利用散列技术高效地去重,而SortedSet如TreeSet则可以对元素进行排序。理解和熟练掌握这些概念对于编写高效的Java代码至关重要。在实际编程中,根据需求选择合适的...
本主题将深入探讨如何使用SortedSet接口来实现Java对象的中文排序,并通过源码分析理解其工作原理。 首先,SortedSet是Java集合框架中的一个接口,它继承自Set接口并添加了排序的特性。SortedSet的主要实现类有...
这些容器包括SortedList、SortedDict和SortedSet,它们都属于Sorted Containers库的一部分。Sorted Containers是一个纯Python实现的库,虽然如此,但其性能表现却能与用C语言实现的模块相媲美,这是由于其内部优化的...
SortedSet.java
Redis的SortedSet是一种有序集合,它允许我们根据成员的分数(score)进行排序。在本文中,我们将探讨如何利用SortedSet实现多维度排序,特别是在手机应用商店的热门榜单场景下,结合下载量和最后更新时间来排列应用。...
NULL 博文链接:https://chaoyi.iteye.com/blog/2085155
SortedSet 是用 C 实现的,它使用 CPython C API,而 SortedDict 是 SortedSet 之上的一个瘦包装器。 下面是几个例子: >> > from skiplist import SortedSet , SortedDict>> > d = SortedDict ({ 'elma' : 1 , '...
这里我们重点讨论两种映射集合类型:`set`和`sortedSet`。 1. `Set`映射集: `Set`是Java集合框架的一部分,它不允许存在重复元素。在Hibernate中,`<set>`元素用于映射数据库表中的数据到一个Java对象的`Set`属性...
不和谐排序集 SortedSet是一种快速高效的数据结构,可提供某些保证和功能。 核心数据结构和算法是使用以Rust编程语言在“本机实现的功能”中实现的。安装将SortedSet添加到您的依赖项中,然后使用mix do deps.get, ...
在Java集合框架中,TreeSet是一个重要的数据结构,它是Set接口的实现类之一,与HashSet和LinkedHashSet不同,TreeSet具有排序功能,这是因为其不仅继承自AbstractSet,还实现了SortedSet和NavigableSet接口。...
SkipListSetCollection是基于跳过列表实现的集合,它遵循Java中的SortedSet接口,提供了有序的集合操作。SortedSet接口是Set接口的一个子接口,保证了元素的唯一性,并且按照特定的顺序排列。 在Java中,SortedSet...
SortedSet<UserDO> sortedSet = new TreeSet(new UserEmailComparator()); sortedSet.addAll(Arrays.asList(userList)); ``` 5. **源码分析**: `Collections.sort()`和`Arrays.sort()`的底层实现通常使用了...
AVL 间隔树是间隔树的一种具体实现,它继承了 Java 中的 SortedSet 接口。SortedSet接口定义了一组有序的元素集合,允许快速查找和比较元素。通过实现SortedSet,AVL 间隔树提供了添加、删除、查找以及查询区间交集...
Golang中的排序集 Sorted Set是一种数据结构,其灵感来自Redis。 它允许通过键或分数快速访问。 财产 类型 描述 key string 节点的标识符。 它在集合中必须是唯一的。... 集合中的每个节点都与rank关联, rank表示...
SortedList 是索引的 SortedSet。 用法 sc.ript.util.SortedList< String> list = new sc.ript.util.TreeList<> ( new java.util.Comparator< String> () { @Override public int compare ( String o1 , ...
var sets=new Collection.SortedSet(); sets.add('z'); sets.add('c'); sets.add('a'); sets.add('a'); sets.add('b'); sets.add('k'); console.log("Contains k "+sets.contains("k")); for(var c in sets....
在Java编程语言中,SortedSet接口是Set接口的一个子接口,它添加了对集合元素排序的能力。SortedSet接口要求其实现类必须维护元素的排序顺序,这种顺序可以是元素的自然顺序(即元素自身可比较),也可以是通过提供...