我必须设计一个接口方法,它接受一个原始 [] 数组并执行排序并返回一个原始 [] 数组以满足低延迟(高性能)要求,并且将被许多线程同时调用
sorted set 或 int[] 是否更适合用于需要非常高性能的目的?
将不胜感激任何答复谢谢
这种方法可能会被称为每秒 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]
尝试这个...
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);
}
阅读此...快速排序