技术,  算法

Java中数组操作的性能

其实不同数据结构的性能差别还是很明显的,只是在实际使用中这种差别会被网络等各种开销所掩盖。所以这里看到的1000倍以上的差别可能在实际场景中并不那么明显。

下面写写出结果:

Insertion Order of objects in HashSet :[Geek3, Geek2, Geek1]
Insertion Order of objects in LinkedHashSet :[Geek2, Geek1, Geek3]
Insertion Order of objects in TreeSet :[Geek1, Geek2, Geek3]
Total time to insert 1000 integer in an array in nanoseconds: 17666
Total time to insert 1000 elements in ArrayList in nanoseconds: 584667
Total time to insert 1000 elements in LinkedList in nanoseconds: 379958
Total time to insert 1000 elements in HashSet in nanoseconds: 4868709
Total time to insert 1000 elements in LinkedHashSet nanoseconds: 1821208
Total time to insert 1000 elements in TreeSet in nanoseconds: 3323333
Total time to Deletion 1000 elements in HashSet in nanoseconds: 3483916
Total time to Deletion 1000 elements in LinkedHashSet in nanoseconds: 1961291
Total time to Deletion 1000 elements in TreeSet in nanoseconds: 6673459

运行环境时m1 CPU的macbook mini。可以看到插入1000个int到数组是0.017ms, ArrayList是0.584ms, LinkedList是0.379ms,HashSet是5ms,LinkedHashSet是2ms。最好和最差之间相差500倍。

但是如果要在网络传输这么1000个integer对象,可能直接就是几十毫秒的花销了,存储的时间根据不同介质也要几毫秒不等。而且通常如果需要存储的话肯定也需要网络开销,本地存储的概率很低。

但是这些基础的性能开销上的差别在大数据处理的时候应该还是能显现出差别的。最慢的5ms 1k数据,如果数量级到1million的话,那么就是5s,1billion的话就是1个多小时。如果用int的话,那就是10s。1个多小时 VS 10s 还是很可观的差距。只是不知道把1billion的数据load到内存需要多久😂

在实际的项目中其实也从来没有遇到过这种内存计算开销导致的性能瓶颈。如果以后什么时候遇到了,我再回来update这里。。

Leave a Reply

Your email address will not be published. Required fields are marked *