Java有一个Comparator用于提供类本身外部对象的比较,以允许使用多种/替代方法进行有序比较。但是进行无序比较的唯一标准方法是覆盖equals()在一个类中。当我想在一个类的外部提供多个/替代的无序比较时,我应该怎么做?(明显的用例是根据特定属性将集合划分为等价类。)假设最终用途是用于无序检查(例如,不是用于排序或索引),实现Comparator是否可行?只检查是否相等,如果两个对象相等则返回0,当两个对象不相等时返回一个值!=0?(注意:我不采用此解决方案的唯一原因是,从技术上讲,它可以通过不提供满足传递性和对称性的关系来破坏Comparator的契约。)似乎应该有一个Equ
publicfinalComparatorID_IGN_CASE_COMP=newComparator(){publicintcompare(Strings1,Strings2){returns1.compareToIgnoreCase(s2);}};privateMap_animals=newTreeMap(ID_IGN_CASE_COMP);我的问题是,如何使用方法get(id)忽略给定的比较器。我希望map按不区分大小写的顺序排序,但是,我希望它在按给定键获取值时区分大小写。 最佳答案 我认为答案很简单。实现您自己的比较器,该
(这是一道冷聚变题)我有两个不同的结构,它们可能包含也可能不包含相同的数据,我想看看它们是否包含相同的数据!我的结构将始终包含简单值(数字、字符串或boolean值),因为它们是使用DeserializeJSON创建的,所以希望这可以轻松完成。我找到了BenNadel的帖子here,但该技术似乎对我不起作用。到目前为止,这是我尝试过的方法(其中包含一些cfwheels代码):itemA=DeSerializeJSON(model("itemsnapshot").findByKey(4).json);itemB=DeSerializeJSON(model("itemsnapshot").
在一个方法中,我收到一个通用的objectEextendsComparable作为论据。现在我想创建两个优先级队列。一个使用comparator由E和其他使用comparator相反的队列使用由E使用(即,如果E使用“=”)。请帮助我如何创建两个这样的队列。queue2=newPriorityQueue(0,Collections.reverseOrder(e));我得到的错误是reverseOrder不适用。请帮忙 最佳答案 看Collections.reverseOrder. 关于j
我正在尝试对自定义对象的ArrayList使用Collections.sort,但我收到了警告,而且我无法弄清楚原因Warning:Typesafety:Uncheckedinvocationsort(ArrayList)ofthegenericmethodsort(List)oftypeCollections使用这段代码:ArrayListcharOccurrences=newArrayList();...Collections.sort(charOccurrences);这是我的方法:publicclassCharProfileimplementsComparable{...@Ov
我正在编写一些自定义比较器,我希望它们将空项推到列表底部,无论我是按升序还是降序排序。解决这个问题的好策略或模式是什么?副手:简单地写单独的升序和降序比较器,共享代码在可能的情况下将空值处理委托(delegate)给另一个人类,通过抛出NPE或通过显式调用包括一个升序标志并放置其中的条件逻辑进行导航零点附近将常规比较器包装在空处理类还有其他策略吗?我想听听关于不同方法的任何经验,以及各种策略的任何陷阱。 最佳答案 我同意JonSkeet的观点(这很简单:)。我试图实现一个非常简单的decorator:classNullCompara
这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Java:SortedMap,TreeMap,Comparable?Howtouse?我正在使用JavaJungIgraph包和Netbeans7。我从Java收到以下错误:Exceptioninthread"main"java.lang.ClassCastException:graphvisualization.MyVertexcannotbecasttojava.lang.Comparableatjava.util.TreeMap.put(TreeMap.java:542)这是与错误相关的代码:Sorted
我知道Collections.sort(myArrayList)可以在数组列表是字符串时按字母顺序对其进行排序,但是当它们是更复杂的东西时怎么办,例如包含两个或多个变量的数据对象,包括字符串。那么有没有办法对它们进行排序?如果Collections没有办法,那么我可以想象制作一个for循环或标准排序算法来查看每个对象的字符串变量并移动对象在数组中的索引。但我主要想知道我是否忽略了一些关于Collections方法 最佳答案 使用thefunctiontakingassecondparameteraComparator.Il允许您传递
当Comparable接口(interface)变成了通用的,声明变成了interfaceComparable真的应该是这样的interfaceComparable>T没有意义不延长Comparable因为实现者必须确保a.compareTo(b)和b.compareTo(a)总是有相反的符号。我一直认为声明“错误”的原因与泛化现有接口(interface)的问题有关,但我无法真正解释它。有没有人有任何见解? 最佳答案 ReallyitshouldbesomethinglikeinterfaceComparable>但这并没有真正为
ArrayLists似乎是用TimSort排序的,其中底层列表在排序过程中并不总是一致。调用比较器时,列表条目可能会消失或出现两次。在我们的比较器中,我们正在比较键,我们正在使用一个函数来获取要与该键进行比较的值。由于此函数在其他上下文中使用,我们测试键是否实际存在于列表中(排序中不需要的东西):if(keys.contains(itemId)){...由于keys是我们正在排序的列表,因此在比较器中可能会发生由于TimSort的内部机制而无法在列表中找到键的情况。问题:是否在Javadoc的某处提到(找不到)您不应该访问Comparator中的基础列表?这是应该对副本进行排序的Tim