草庐IT

counting-sort

全部标签

java - 为什么 Collections.sort() 针对 LinkedList 进行了优化,而没有针对 ArrayList 进行优化?

为什么Collections.sort()创建一个额外的对象数组并对数组执行Tim排序,最后将排序后的数组复制回List对象?我知道此调用针对LinkedList进行了优化,但我们不会损失ArrayList的性能吗?我们本可以避免2n次将其转换为对象数组并将它们添加回列表的操作。我知道这些额外的操作不会影响整个排序操作的Big-O,但我相信它可以针对ArrayList进一步优化。我是不是漏掉了什么?我只是想了解为什么架构是这样布局的。谢谢。https://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/clas

java - MongoDB : Sorting Data when using DBcollection find

我想借助基于lastUpdated字段的排序返回查找查询的结果。目前我看到了两种方式第一种方法BasicDBObjectquery=newBasicDBObject();query.put("updated_at","-1");query.put(MONGO_ATTR_SYMBOL,""+symbol);DBCursorcursor=DBcollection.find(query).sort(query);第二种方法DBCursorcursor=DBcollection.find(query,newBasicDBObject("sort",newBasicDBObject("lastU

Java + Count 从 int 数组中复制而不使用任何 Collection 或另一个中间数组

作为Java面试试卷的一部分,我有以下问题需要解决。但是我有点想知道如果没有任何Collection或中间Array,我如何实现它。问题:-在不使用任何集合或其他中间数组的情况下从int数组中计算重复项Inputvalues:-{7,2,6,1,4,7,4,5,4,7,7,3,1}Output:-Numberofduplicatesvalues:3Duplicatesvalues:7,4,1我已经实现了以下解决方案,但还没有完成。有人知道吗?谢谢。publicstaticvoidduplicate(intnumbers[]){for(inti=0;i 最佳答

java - 为什么Java的sort实现在排序之前先将列表转换为数组?

在JDK1.8中,java.util.List#sort(Comparator)方法的第一条语句如下:Object[]a=this.toArray();将列表复制到数组中、对其进行排序并将列表的每个节点重置为数组中排序后的值的代价很高。在对ArrayList进行排序时,似乎可以不将值复制到临时数组。我对吗?如果不是,是什么指导了该方法的创建者? 最佳答案 java.util.List接口(interface)中的sort只是列表排序的默认实现。ArrayList使用排序方法覆盖此默认值,该方法直接对其内部数组进行排序。

Java : Sort integer array without using Arrays. 排序()

这是我们Java类(class)中一项练习中的说明。首先,我想说我“做好了功课”,我不只是懒惰地要求StackOverflow上的某人为我回答这个问题。在所有其他练习中,这个特定项目一直是我的问题,因为我一直在努力为此寻找“完美算法”。WriteJAVAprogramthatwillinput10integervaluesanddisplayeitherinascendingordescendingorder.Note:Arrays.sort()isnotallowed.这是我想出的代码,它可以工作,但有一个明显的缺陷。如果我输入相同的值两次或更多次,例如:5,5,5,4,6,7,3,

Java 和 .NET : Why different sorting algorithms are used by default?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。只是想知道为什么Java和.NETFramework默认使用不同的排序算法。在Java中Array.Sort()使用MergeSort默认算法为Wikipedia.com说:InJava,theArrays.sort()methodsusemergesortoratunedquicksortdependingonthedatatypesandforimp

Java 流 : distinct() on a pre-sorted stream?

如thisquestion中所述,执行distinct()当运行时知道要对其操作的流进行排序时,它能够使用更有效的算法。如果我们知道流已排序(例如,因为它来自外部预先排序的数据源,例如带有orderby子句的SQL查询)但不是没有这样标记?有一个unordered()删除排序标志的操作,但据我所知,没有办法告诉系统数据已从外部排序。 最佳答案 例如,您可以围绕现有集合创建拆分器:Listlist=Arrays.asList(1,2,3,4);Spliteratorsp=Spliterators.spliterator(list,Sp

java - 比较 Collectors.summingLong 和 Collectors.counting 的性能

基准测试在intelcorei5,Ubuntu下运行javaversion"1.8.0_144"Java(TM)SERuntimeEnvironment(build1.8.0_144-b01)JavaHotSpot(TM)64-BitServerVM(build25.144-b01,mixedmode)我正在比较Collectors.counting和Collectors.summingLong(x->1L)的性能。这是基准:publicListints=newArrayList();Collectorcounting=Collectors.counting();Collectorsu

java - ArrayList.sort() 与 PriorityQueue

这个问题在这里已经有了答案:Java-PriorityQueuevssortedLinkedList(11个答案)关闭4年前。我需要支持比读取更多的插入并保持数据排序。哪个性能更好:使用提供比较器的PriorityQueue或使用ArrayList并在每次插入后调用.sort()?每次调用.sort()都感觉不对,但我说不清为什么。

java - Stream.collect(groupingBy(identity(), counting()) 然后按值对结果进行排序

我可以collectalistofwordsintoabag(又名多集):Mapbag=Arrays.asList("oneo'clocktwoo'clockthreeo'clockrock".split("")).stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));但是,不能保证袋子中的条目以任何特定顺序排列。例如,{rock=1,o'clock=3,one=1,three=1,two=1}我可以将它们放入列表中,然后使用我实现的值比较器对它们进行排序:ArrayList