1

我必须设计一个接口方法,它接受一个原始 [] 数组并执行排序并返回一个原始 [] 数组以满足低延迟(高性能)要求,并且将被许多线程同时调用

sorted set 或 int[] 是否更适合用于需要非常高性能的目的?

将不胜感激任何答复谢谢

4

2 回答 2

4

这种方法可能会被称为每秒 200 万次,我确信 Array.Sort 对此无效。此数组中的最大大小可以是 100 个元素

一个快速的微型基准测试表明,它可以在大约100 秒内对一个数组进行Arrays.sort排序。1.3 微秒* 在标准台式机 (i7) 上,使用一个内核。int[]int

所以你可以每秒调用它大约 800,000 次(仍然假设你只使用 1 个核心)。因此,如果您有 4 个或更多处理器,您应该能够每秒运行 200 万次排序操作

注意:如果您的数组具有典型特征(例如许多重复或大部分排序或数字都在相当窄的范围内),您可能能够找到更适合的算法,但对于一般用例,我很确定 JDK 算法相当强大而高效。


*微基准测试的结果(使用 jmh 完成):

Run result "sort": 1341.298 ±(95%) 11.701 ±(99%) 19.406 nsec/op
Run statistics "sort": min = 1331.329, avg = 1341.298, max = 1352.831, stdev = 9.425
Run confidence intervals "sort": 95% [1329.597, 1352.999], 99% [1321.892, 1360.704]
于 2013-05-17T16:23:47.503 回答
3

尝试这个...

String[] fruits = new String[] {"Pineapple","Apple", "Orange", "Banana"}; 

    Arrays.sort(fruits);

    int i=0;
    for(String temp: fruits){
        System.out.println("fruits " + ++i + " : " + temp);
}

或这个...

List<String> fruits = new ArrayList<String>();

    fruits.add("Pineapple");
    fruits.add("Apple");
    fruits.add("Orange");
    fruits.add("Banana");

    Collections.sort(fruits);

    int i=0;
    for(String temp: fruits){
        System.out.println("fruits " + ++i + " : " + temp);
}

阅读此...快速排序

于 2013-05-17T15:40:39.187 回答