相关疑难解决方法(0)

如何在Java中使用Comparator进行排序

我学会了如何使用比较器,但我对比较器有困难.我的代码中有错误:

Exception in thread "main" java.lang.ClassCastException: New.People cannot be cast to java.lang.Comparable
 at java.util.Arrays.mergeSort(Unknown Source)
 at java.util.Arrays.sort(Unknown Source)
 at java.util.Collections.sort(Unknown Source)
 at New.TestPeople.main(TestPeople.java:18)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import java.util.Comparator;

public class People implements Comparator {
   private int id;
   private String info;
   private double price;

   public People(int newid, String newinfo, double newprice) {
       setid(newid);
       setinfo(newinfo);
       setprice(newprice);
   }

   public int getid() {
       return id;
   }

   public void setid(int id) {
       this.id = id;
   }

   public String getinfo() {
       return info;
   }

   public void setinfo(String info) …
Run Code Online (Sandbox Code Playgroud)

java sorting comparator

163
推荐指数
6
解决办法
49万
查看次数

为什么Collections.sort使用合并排序而不是快速排序?

我们知道快速排序是最快的排序算法.

collections.sort使用合并排序算法而不是快速排序.但是Arrays.sort使用快速排序.

Collections.sort使用合并排序而不是快速排序的原因是什么?

java sorting collections

91
推荐指数
1
解决办法
6万
查看次数

Java 7是否使用Tim Sort for Method Arrays.Sort?

我找不到Java 7的文档,我只能找到关于Java 6的文档,它仍然可以快速或合并.有谁知道如何Arrays.sort在Java 7中找到该方法的文档?

java arrays sorting timsort

45
推荐指数
3
解决办法
2万
查看次数

为什么Java 6 Arrays#sort(Object [])从mergesort更改为insertionsort用于小数组?

Arrays.java如果数组长度小于某个阈值,Java 6的mergesort实现将使用insert -sort.此值被硬编码为7.由于算法是递归的,因此对于大型数组,这最终会发生多次.规范的合并排序算法不会这样做,只是使用merge-sort一直向下,直到列表中只有1个元素.

这是优化吗?如果是这样,它应该如何帮助?为什么7?插入排序(甚至是<=7事物)会大大增加对大型数组进行排序所需的比较次数 - 因此会增加compareTo()调用速度慢的排序成本.

对于INSERTIONSORT_THRESHOLD的不同值,array-size vs#-of-comparisons

(x轴是size of array,y轴是# of comparisons,对于不同的值INSERTIONSORT_THRESHOLD)

java algorithm mergesort

22
推荐指数
1
解决办法
1193
查看次数

为什么Arrays.sort是快速排序算法,为什么不是另一种排序算法呢?

为什么?它更快还是更有效?

对于具有一个核心的系统,我们可以使用quicksort.我们应该在具有两个内核,四个内核或八个内核的系统上使用什么?

java algorithm

19
推荐指数
4
解决办法
3万
查看次数

Collections.sort实现

我无法理解Collections.sort方法的方法实现和逻辑.这是我发现的方法实现,

public static <T extends Comparable<? super T>> void sort(List<T> list) {
    Object[] a = list.toArray();
    Arrays.sort(a);
    ListIterator<T> i = list.listIterator();
    for (int j=0; j<a.length; j++) {
        i.next();
        i.set((T)a[j]);
    }
    }
Run Code Online (Sandbox Code Playgroud)

首先,此方法返回类型为void.什么是<T extends Comparable<? super T>>方法签名呢?

在这里使用Array.sort的目的是什么?

一旦我们实现了可比较或比较器,我们编写的compare或compareTo方法逻辑会考虑哪些?

java sorting collections

7
推荐指数
2
解决办法
2万
查看次数

对快速排序和归并排序进行基准测试得出归并排序更快

我已经尝试过基准测试,出于某种原因,当在 1M 元素的数组上尝试它们时,它们在0.3 秒内Mergesort排序并Quicksort花费了 1.3 秒。

我听说快速排序通常更快,因为它的内存管理,但如何解释这些结果?

如果这有什么不同,我正在运行 MacBook Pro。输入是一组从 0 到 127 的随机生成的整数。

代码在Java中:

归并排序:

static void mergesort(int arr[]) {
    int n = arr.length;
    if (n < 2)
        return;
    int mid = n / 2;
    int left[] = new int[mid];
    int right[] = new int[n - mid];
    for (int i = 0; i < mid; i++)
        left[i] = arr[i];
    for (int i = mid; i < n; i++)
        right[i - mid] = arr[i];
    mergesort(left);
    mergesort(right); …
Run Code Online (Sandbox Code Playgroud)

java benchmarking mergesort quicksort

2
推荐指数
1
解决办法
261
查看次数

集合排序方法内部使用哪种排序算法?

在collections类中有一个方法sort()用于排序集合元素,但我有一个疑问,内部使用哪种排序算法对元素进行排序.我用Google搜索但没有得到正确答案.请帮帮我 .

java collections

-1
推荐指数
1
解决办法
1463
查看次数