рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ
рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЗрдВрдЯ, рд▓реЙрдиреНрдЧ рдЗрддреНрдпрд╛рджрд┐ред рдорд╛рдирдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЗрдВрдЯреЗрдЧрд░, рд▓реЙрдиреНрдЧ рдЗрддреНрдпрд╛рджрд┐ред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
рдСрдЯреЛрдмреЙрдХреНрд╕рд┐рдВрдЧ / рдСрдЯреЛрдСрдирдмреЙрдХреНрд╕рд┐рдВрдЧ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдвреЗрд░ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рд╣реАрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рди рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд
рдУрд╡рд░рд╣реЗрдб рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐
рдЬреАрд╕реА рдкрд░ рд▓реЛрдб рднреА рдмрдирд╛рддреЗ рд╣реИрдВред
рд╣реАрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рдФрд░ рдирд╛рдпрд╛рдм рдорд╛рдЗрдирд╕ рд╣реИ - рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧред рдкреНрд░реЛрд╕реЗрд╕рд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреИрд╢ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╕рд░рдгреА рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХреИрд╢ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдвреЗрд░ рдкрд░ рдмрд┐рдЦрд░реА рд╣реБрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреИрд╢ рдореЗрдВ рд╣рд┐рдЯ рдХрдо рд╣реЛрдЧреАред рдХреИрд╢рд┐рдВрдЧ рдФрд░ рдореЗрдореЛрд░реА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред
рдЯреНрд░реЛрд╡ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рд╕рдВрдЧреНрд░рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЯреНрд░реЛрд╡ рд╕рдВрдЧреНрд░рд╣ рддреЗрдЬреА рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХрдо рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрдЧреНрд░рд╣ рд╕реЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
Jdk рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЯреНрд░реЛрд╡ рд╣реИрд╢
рдУрдкрди рдПрдбреНрд░реЗрд╕рд┐рдВрдЧ рдЯрдХреНрдХрд░ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдирд╛рдордХрд░рдг рд╕рд┐рджреНрдзрд╛рдВрдд T <рдЯрд╛рдЗрдк> <CollectionType> рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
TIntList рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - int рдХреА рд╕реВрдЪреА, TIntArrayList рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
TIntList l = new TIntArrayList();
TLongLongMap - рд▓рдВрдмреА рдХреБрдВрдЬреА рдФрд░ рд▓рдВрдмреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдирдХреНрд╢рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, TLongLongHashMap рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
TLongLongMap m = new TLongLongHashMap();
Jdk рд╕рдВрдЧреНрд░рд╣реЛрдВ рдореЗрдВ, рдпрджрд┐ рдЖрдЗрдЯрдо рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдирд▓ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред "NoEntryValue" рдЯреНрд░реЛрд╡ рдореЗрдВ рд▓реМрдЯрддрд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ 0. рд╣реИред рдЖрдк
NoEntryValue рд╕реАрдЦ
рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рддреЗ рд╕рдордп NoEntryValue рд╕реЗрдЯ
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЯреНрд░реЛрд╡ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд▓рд╛рдн рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ - forEach,
public static long troveEach() { final long [] rvalue = {0};
grep ,
inverseGrep - рд╕рд╢рд░реНрдд рд╕реВрдЪреА
рд╕рдВрдХрд▓рди (TList рдХреЗ рд▓рд┐рдП ...) рдФрд░
transformValues - рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡реЛрдВ рдкрд░ inplace рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ - рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ (рдПрдХ рд╡рд╕реНрддреБ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА) рдХреЗ рд╕рд╛рде рдПрдХ
рд╣реИрд╢рдкреЙрдк / рд╣реИрд╢рд╕реЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ Hрд╢рд┐рдВрдЧStrategy <T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмреЗрдВрдЪрдорд╛рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЯреВрд▓
jhh рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдорд╛рд╡реЗрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВредрд╕реНрд╡рд░реВрдкрдг, рдПрдХ рдСрдкрд░реЗрд╢рди -
1 рдорд┐рд▓рд┐рдпрди рддрддреНрд╡реЛрдВ (
рдкреВрд░реА рд░рд┐рдкреЛрд░реНрдЯ рдпрд╣рд╛рдВ ) рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛:
$ java -version java version "1.7.0_21" Java(TM) SE Runtime Environment (build 1.7.0_21-b11) Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode) $ java -server -XX:+AggressiveOpts -Xms2048m \ -Xmx2048m -jar microbenchmarks.jar ".*Trove.*" -prof gc -i 3 -r 5s
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЛрдб рдереНрд░реВ Cnt Sec рдорддрд▓рдм рдореАрди рдПрд░рд░ рдпреВрдирд┐рдЯ
// рд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓реЗрдВ <Integer>
IntListJdkInsert 1 1 3 5 104.950 6.756 рдСрдкреНрд╕ / рд╕реЗрдХ
// рд╕реВрдЪреА рдХреА рдкреВрд░реНрдг рдЧрдгрдирд╛ <Integer>
IntListJdkTraverse 1 1 5 5 774.100 71.809 рдСрдкреНрд╕ / рд╕реЗрдХ
// TIntArrayList рдореЗрдВ рдбрд╛рд▓реЗрдВ
IntListTroveInsert 1 3 5 424.556 28.239 рдСрдкреНрд╕ / рд╕реЗрдХ
// рдкреВрд░реНрдг рдЧрдгрдирд╛ TIntArrayList
IntListTroveTraverse 1 1 5 5 3548.806 7.712 рдСрдкреНрд╕ / рд╕реЗрдХ
// HashMap <Long, Long> рдореЗрдВ рдбрд╛рд▓реЗрдВ
LongHashMapJdkInsert 1 3 5 24.683 1.994 рдСрдкреНрд╕ / рд╕реЗрдХ
// HashMap <long, Long> рдмрд╛рд░реА рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ
LongHashMapJdkSearch 1 1 5 5 67.789 1.119 рдСрдкреНрд╕ / рд╕реЗрдХ
// рдореВрд▓реНрдпреЛрдВ рдХреА рд╡рд┐рд╕реНрддреГрдд рдЦреЛрдЬ HashMap <рд▓реЙрдиреНрдЧ, рд▓реЙрдиреНрдЧ>
LongHashMapJdkTraverse 1 3 5 99.761 0.882 рдСрдкреНрд╕ / рд╕реЗрдХрдВрдб рдХрд╛ рд░реЛрдорд╛рдВрдЪ
// TLongLongMap рдореЗрдВ рдбрд╛рд▓реЗрдВ
LongHashMapTroveInsert 1 3 5 28.750 0.165 рдСрдкреНрд╕ / рд╕реЗрдХ
// рдмрджрд▓реЗ рдореЗрдВ TLongLongMap рдореЗрдВ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ
LongHashMapTroveSearch 1 1 5 5 145.933 0.416 рдСрдкреНрд╕ / рд╕реЗрдХрдВрдб рд░реЛрдорд╛рдВрдЪрд┐рдд рдХрд░реЗрдВ
/ / forong рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ TLongLongMap рдореВрд▓реНрдпреЛрдВ рдХреА рдкреВрд░реА рдЧрдгрдирд╛
LongHashMapTroveTraverse 1 3 5 318.528 0.980 рдСрдкреНрд╕ / рд╕реЗрдХрдВрдб рдХрд╛ рд░реЛрдорд╛рдВрдЪ
рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреАрд╕реА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
jd List<Integer>: Iteration 1 (5s in 1 thread): 103,950 ops/sec GC | wall time = 5,002 secs, GC time = 0,331 secs, GC% = 6,62%, GC count = +24 Trove TIntArrayList: Iteration 1 (5s in 1 thread): 428,400 ops/sec GC | wall time = 5,002 secs, GC time = 0,019 secs, GC% = 0,38%, GC count = +32
рдпрджрд┐ рдЖрдк TIntArrayList рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ - рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
public class TIntArrayList implements TIntList, Externalizable { static final long serialVersionUID = 1L; protected int[] _data;
TLongLongMap рдЦреЛрдЬ рдЧрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХреЛрдИ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдФрд░ рдЕрдирдмреЙрдХреНрд╕рд┐рдВрдЧ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рд╣реА рдмреЗрдВрдЪрдорд╛рд░реНрдХ, рд▓реЗрдХрд┐рди рдПрдХ рдСрдкрд░реЗрд╢рди -
1 рд╣рдЬрд╛рд░ рддрддреНрд╡:
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЛрдб рдереНрд░реВ Cnt Sec рдорддрд▓рдм рдореАрди рдПрд░рд░ рдпреВрдирд┐рдЯ
IntListJdkInsert 1 1 5 5 239478.011 871.469 рдСрдкреНрд╕ / рд╕реЗрдХ
IntListJdkTraverse 1 1 5 5 1326701.717 1649.389 рдСрдкреНрд╕ / рд╕реЗрдХ
IntListTroveInsert 1 1 3 5 315562.594 2483.415 рдСрдкреНрд╕ / рд╕реЗрдХ
IntListTroveTraverse 1 1 5 5 3630599.806 10822.903 рдСрдкреНрд╕ / рд╕реЗрдХ
LongHashMapJdkInsert 1 3 5 45315.689 47.630 рдСрдкреНрд╕ / рд╕реЗрдХрдВрдб рдХрд╛ рд░реЛрдорд╛рдВрдЪ
LongHashMapJdkSearch рдереНрд░реАрдк 1 3 5 114759.789 424.996 рдСрдкреНрд╕ / рд╕реЗрдХ
LongHashMapJdkTraverse 1 1 5 5 210012.550 139.001 рдСрдкреНрд╕ / рд╕реЗрдХ
LongHashMapTroveInsert 1 3 5 33078.583 119.127 рдСрдкреНрд╕ / рд╕реЗрдХ
LongHashMapTroveSearch 1 1 5 5 148311.567 267.613 рдСрдкреНрд╕ / рд╕реЗрдХ
LongHashMapTroveTraverse 1 1 3 5 351955.550 901.902 рдСрдкреНрд╕ / рд╕реЗрдХрдВрдб рдХрд╛ рд░реЛрдорд╛рдВрдЪ
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдореА рдХреЗ рд╕рд╛рде, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЕрдВрддрд░ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╕рдВрдЧреНрд░рд╣ рдЫреЛрдЯреЗ рд╣реИрдВ рдФрд░ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдбрд╝реЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдЯреНрд░реЛрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб
GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред
рдкреБрдирд╢реНрдЪред рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рддреЗ рд╕рдордп рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдорд╛рди рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред