问题标签 [compareto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
423 浏览

c# - 自定义 GetHashcode 实现是否会导致 Dictionary 或 Hashtable 的“桶”出现问题

我正在考虑为给定对象实现我自己的自定义哈希码......并将其key用作我的字典。由于 2 个对象可能(很可能)具有相同的哈希码,我应该覆盖哪些额外的运算符,以及该覆盖(从概念上)应该是什么样子?

对比

换句话说,字典是否使用以下组合来确定唯一性以及将对象放置在哪个存储桶中?

哪些比其他更重要?

  • 哈希码
  • 等于
  • ==
  • 相比于()

是否仅在 SortedDictionary 中需要 compareTo?

0 投票
3 回答
11691 浏览

java - CompareTo 与 Equals!比较字符串还是对象?

快速提问

我正在比较一个字符串,我应该使用 equals 还是 compareTo?因为我虽然 equals 区分了 2 个 String 类型的对象,而不仅仅是它们的值......

这可能会导致问题,因为:

即使它们具有相同的值,它们是两个不同的对象吗?

就性能和精度而言,equals 和 compareTo 实现之间到底有什么区别?

0 投票
3 回答
123 浏览

java - 什么时候包括什么?

我创建了一个类Person(如书中所说)来保存从键盘输入的人的姓名和姓氏,然后还有另一个类PhoneNumber将国家代码、区号和一个人的号码封装为字符串。
Person 旨在用作 Hashmap 中的键。
BookEntry封装了PersonPhoneNumber。许多BookEntry对象组成了一个代表电话簿的 HashMap。

Person实现Comparable<Person>所以它包含CompareTo(Person)方法。后来书中增加了equals(Object anotherPerson)方法。
我的问题是,CompareTo比较两个键的方法还不够吗?还是 HashMap<> 的内部机制要求我包含equals()比较两个键的方法?
相比于()

等于()

0 投票
2 回答
233 浏览

java - CompareTo 覆盖排序

我在覆盖 compareTo 方法时遇到问题。该程序模拟了不同的员工类型,我完美地按员工类型排序,但不能让它按总工资进行二次排序。一旦它按类名/员工类型排序,它就需要按 GrossPay 排序,我可以通过辅助方法获得它。下面是代码:

我正在将 Collection.sort() 与雇员的数组列表一起使用。当我打印出来时,我会得到一个按员工类型排序的很好的列表,但它应该按 GrossPay 排序。

0 投票
1 回答
376 浏览

c# - listbox.sort 和字符串比较函数的小问题

我在列表框对其元素的排序方式和 CompareTo 函数方面存在差异。

问题是,我正在使用两个列表框,并试图使两个元素列表仅出现在其中一个中。两个列表框都使用 sorted 属性进行排序。

我的程序通过列表框运行,并使用 CompareTo 函数一一比较元素:

现在,一切正常,除了包含撇号 (') 的项目 - 就像在“Donald's Pizza”中一样:

在排序的列表框中,“Donald's Pizza”排在“Donald Duck”之前。撇号小于空格。但是使用 CompareTo 函数, "Donald's Pizza" 大于 "Donald Duck" 。“CompareTo”说,撇号大于空格!

这弄乱了我的系统。

如果我知道这只是导致问题的撇号,我可以轻松解决问题,但现在如果它也适用于其他字符,我不安全。

作为一种解决方案,我必须对列表框进行自己的排序过程,但我只是忽略了一些明显的东西吗?

编辑:感谢您的回答。

我最终根据 CompareTo 函数制作了自己的排序程序。这样我可以确定列表框的类型 100% 等于我稍后使用的 CompareTo 函数。

0 投票
1 回答
677 浏览

java - Java 中的comapareTo 方法是如何工作的?

谁能解释以下代码是如何工作的?

0 投票
3 回答
1843 浏览

java - 比较 TreeMap 的内容给出了错误的答案

我在另一个 TreeMap 中使用 TreeMap 作为“键”

IE

在我的代码中,“对象”是一个个人构造,但对于这个例子,我使用了一个字符串。

我创建了一对 TreeMap 来测试TreeMap.CompareTo()TreeMap.HashCode()方法。这从以下开始......

从这里我现在调用英语项目以查看它是否包含密钥

但是我应该注意到 HashMap 和 TreeMap 都指向 AbstractMap 父级中的相同 HashCode() 方法。

我的第一个想法是将我的 TreeMap 转换为 HashMap,但这似乎有点笨拙!所以我决定将 hashCode() 方法应用于 2 个树图对象。

打印以下内容

对我来说,哈希码应该不同,因为键值不同,我找不到关于 HashMap 和 TreeMap 之间的 hashCode() 方法的实现差异的详细信息。

请不要以下。仅将 Keys 更改为 HashMap 不会停止 ClassCastException 错误。将所有映射更改为 HashMap 即可。所以 TreeMap 中的 containsKey() 方法有些东西不能正常工作,或者我误解了 - 谁能解释一下?

我得到第一个和第二个映射对象的 hashCode 的部分总是产生相同的输出(无论我在这里使用哈希映射还是树映射)但是 if(english.ContainsKey(second)) 不打印任何消息使用了 HashMap,因此 HashMap 实现中的某些内容显然与 compareTo() 方法不同。

我的主要问题是。

在哪里可以找到用于 TreeMap 对象的键类型的详细信息(以防止将来出现“ClassCastException”错误)。

如果我不能使用某种类型的对象作为键,为什么我首先允许将它作为键插入到 TreeMap 中?(当然,如果我可以插入它,我应该能够检查密钥是否存在?)

谁能建议另一个已订购 inster/retrieves 的构造来替换我的 TreeMap 关键对象?

还是我可能发现了奇怪的行为。根据我的理解,我应该能够将 TreeMap 替换为 HashMap,或者我偶然发现了一个边缘场景?

提前感谢您的评论。

大卫。

附言。这个问题在我的代码中不是问题,因为我使用个人实用程序创建依赖于键和值对的哈希(即,我计算键哈希值与值哈希值不同......对不起,如果是一个令人困惑的句子!)我假设 hashCode 方法只是将所有值加在一起,而不考虑项目是键还是值。

pps。我不确定这是否是一个好问题,关于如何改进它的任何指示?

编辑。

从人们的回应中,人们似乎认为我在做一些花哨的语言词典,这对我的例子并不感到意外,对此感到抱歉。我用这个作为例子,因为它很容易进入我的大脑,写得很快,并展示了我的问题。

真正的问题如下。

我正在访问一个遗留的数据库结构,它不能很好地与任何东西交谈(结果集不是正向和反向可读的等)。所以我抓取数据并从中创建对象。最小的对象代表表中的一行(这是在上面的示例中我使用字符串值 'english' 或 'french' 的对象。

我有这些 rowObject 的集合,每一行都有一个明显的键(这是指向相关 rowObject 的 TreeMap)。

我不知道这是否使事情更清楚!

编辑 2。

我觉得我需要进一步详细说明我对原始使用的选择

对于我的数据结构,然后转换为 TreeMap 以获得有序视图。

在编辑 1 中,我说旧版 DB 不能很好地运行(这是我怀疑的 JDBC.ODBC 的问题,我不打算购买 JDBC 来与 DB 通信)。事实上,我在创建 java 'dataObject' 时对数据进行了一些修改。这意味着尽管 DB 可能会以升序或降序的方式输出结果,但我无法知道它们以什么顺序插入到我的 dataObject 中。使用 likeHashMap 似乎是一个不错的解决方案(请参阅 duffymo 的建议),但我后来需要以有序的方式提取数据,而不仅仅是连续提取数据(LinkedHashMap 仅保留插入顺序),而且我不倾向于对所有内容进行排序和当我需要在另外两个项目之间插入一个新项目时制作副本,TreMap 会为我做这件事...... 但是如果我为键创建一个特定对象,它将只包含一个 TreeMap 作为成员,显然我需要提供一个 compareTo 和 hashCode 方法。那么为什么不只是扩展 TreeMap (尽管 Duffymo 有一点关于抛出该解决方案)!

0 投票
2 回答
5440 浏览

java - 使用 compareTo 方法比较两种不同的数据类型

我有一个实现 Set 的类 WordCount,但是我在使用 WordCount 类中的 comareTo 方法时遇到了问题,该类从 Word 类中获取了该方法。我正在尝试将 Word 对象与 String 对象进行比较,但最后 Word 也是一个字符串,那为什么它会给我错误?

词类

使用 compareTo 方法时,我在此类中遇到错误

0 投票
7 回答
16612 浏览

java - Java:如何使用 compareTo 方法检查 2 个节点的顺序

我正在做一个编程任务,我可以使用一些帮助来理解 compareTo 方法。

作业的问题之一是将传入元素添加到列表中。如果列表已排序,我应该将新节点放在正确的位置。该列表可以按升序或降序排序。我想我可以通过将头节点与 (node.getNext()) 之后的节点进行比较来检查哪个是顺序,但我不确定。我不确定的代码行如下:

head 是第一个节点,是一个泛型数据类型 T,它已经被添加了。tp 是 head.getNext() 只是为了节省空间,也是一个通用数据类型 T,因为我确信我会再次输入它。我没有在程序上写 compareTo 方法,因为教授告诉我只需调用 compareTo 方法来比较另一种泛型数据类型。另外,我不确定以下之间的区别:

但任务要求我使用第一个。

如果头节点元素是 1,下一个是 3,if 语句的输出是什么?对或错?

0 投票
2 回答
317 浏览

java - 一个完全可覆盖的 compareTo() 方法?

由于必须第一次定义相关对象之间的关系,我发现自己花了整个周末在网上搜索有关equals()compareTo(). 在发现很少有用的信息后,我决定自己找到解决方案。我相信以下是该解决方案在compareTo()方法方面的体现。我有一个想法,类似的技术也可能适用于该equals()方法。

我希望比我更聪明的人有时间验证这些发现并就可能遇到的任何陷阱提供反馈。