fork download
  1. // author: Leonardone @ NEETSDKASU
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6. import java.nio.*;
  7.  
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. final int TEST = 5000;
  13.  
  14. doIt(TEST, 10);
  15. doIt(TEST, 8);
  16. doIt(TEST, 5);
  17.  
  18. }
  19.  
  20. static void doIt(final int TEST, final int SIZEBIT) {
  21.  
  22. System.out.println(":::::::::::::::::::::");
  23. System.out.println("TEST COUNT: " + TEST);
  24. System.out.println("SIZEBIT: " + SIZEBIT);
  25. System.out.println("SIZE: " + (1 << SIZEBIT));
  26. System.out.flush();
  27.  
  28. testFoo(TEST, SIZEBIT);
  29. testArrayList(TEST, SIZEBIT);
  30. testIntBuffer(TEST, SIZEBIT);
  31. testArray(TEST, SIZEBIT);
  32. }
  33.  
  34. static void testFoo(final int TEST, final int SIZEBIT) {
  35. Foo foo = new Foo(SIZEBIT);
  36. long t0, t1;
  37. int sum;
  38.  
  39. t0 = System.nanoTime();
  40. for (int i = 0; i < TEST; i++) {
  41. foo.put(i, i * 2);
  42. }
  43. t1 = System.nanoTime();
  44. System.out.println("foo addNew time: " + (t1 - t0));
  45. System.out.flush();
  46.  
  47. t0 = System.nanoTime();
  48. for (int i = 0; i < TEST; i++) {
  49. foo.put(i, foo.get(i) * 3);
  50. }
  51. t1 = System.nanoTime();
  52. System.out.println("foo update time: " + (t1 - t0));
  53. System.out.flush();
  54.  
  55. t0 = System.nanoTime();
  56. sum = 0;
  57. for (int i = 0; i < TEST; i++) {
  58. sum += foo.get(i);
  59. }
  60. t1 = System.nanoTime();
  61. System.out.println("foo get time: " + (t1 - t0));
  62. System.out.println("foo sum: " + sum);
  63. System.out.flush();
  64. }
  65.  
  66. static void testArrayList(final int TEST, final int SIZEBIT) {
  67. ArrayList<Integer> list = new ArrayList<>(1 << SIZEBIT);
  68. long t0, t1;
  69. int sum;
  70.  
  71. t0 = System.nanoTime();
  72. for (int i = 0; i < TEST; i++) {
  73. list.add(i * 2);
  74. }
  75. t1 = System.nanoTime();
  76. System.out.println("list addNew time: " + (t1 - t0));
  77. System.out.flush();
  78.  
  79. t0 = System.nanoTime();
  80. for (int i = 0; i < TEST; i++) {
  81. list.set(i, list.get(i) * 3);
  82. }
  83. t1 = System.nanoTime();
  84. System.out.println("list update time: " + (t1 - t0));
  85. System.out.flush();
  86.  
  87. t0 = System.nanoTime();
  88. sum = 0;
  89. for (int i = 0; i < TEST; i++) {
  90. sum += list.get(i);
  91. }
  92. t1 = System.nanoTime();
  93. System.out.println("list get time: " + (t1 - t0));
  94. System.out.println("list sum: " + sum);
  95. System.out.flush();
  96. }
  97.  
  98. static void testIntBuffer(final int TEST, final int SIZEBIT) {
  99. IntBuffer ib = IntBuffer.allocate(1 << SIZEBIT);
  100. long t0, t1;
  101. int sum;
  102.  
  103. t0 = System.nanoTime();
  104. for (int i = 0; i < TEST; i++) {
  105. if (i >= ib.limit()) {
  106. ib = IntBuffer.wrap(Arrays.copyOf(ib.array(), ib.limit() + (1 << SIZEBIT)));
  107. }
  108. ib.put(i, i * 2);
  109. }
  110. t1 = System.nanoTime();
  111. System.out.println("buffer addNew time: " + (t1 - t0));
  112. System.out.flush();
  113.  
  114. t0 = System.nanoTime();
  115. for (int i = 0; i < TEST; i++) {
  116. ib.put(i, ib.get(i) * 3);
  117. }
  118. t1 = System.nanoTime();
  119. System.out.println("buffer update time: " + (t1 - t0));
  120. System.out.flush();
  121.  
  122. t0 = System.nanoTime();
  123. sum = 0;
  124. for (int i = 0; i < TEST; i++) {
  125. sum += ib.get(i);
  126. }
  127. t1 = System.nanoTime();
  128. System.out.println("buffer get time: " + (t1 - t0));
  129. System.out.println("buffer sum: " + sum);
  130. System.out.flush();
  131. }
  132.  
  133. static void testArray(final int TEST, final int SIZEBIT) {
  134. int[] ia = new int[1 << SIZEBIT];
  135. long t0, t1;
  136. int sum;
  137.  
  138. t0 = System.nanoTime();
  139. for (int i = 0; i < TEST; i++) {
  140. if (i >= ia.length) {
  141. ia = (Arrays.copyOf(ia, ia.length + (1 << SIZEBIT)));
  142. }
  143. ia[i] = i * 2;
  144. }
  145. t1 = System.nanoTime();
  146. System.out.println("array addNew time: " + (t1 - t0));
  147. System.out.flush();
  148.  
  149. t0 = System.nanoTime();
  150. for (int i = 0; i < TEST; i++) {
  151. ia[i] = ia[i] * 3;
  152. }
  153. t1 = System.nanoTime();
  154. System.out.println("array update time: " + (t1 - t0));
  155. System.out.flush();
  156.  
  157. t0 = System.nanoTime();
  158. sum = 0;
  159. for (int i = 0; i < TEST; i++) {
  160. sum += ia[i];
  161. }
  162. t1 = System.nanoTime();
  163. System.out.println("array get time: " + (t1 - t0));
  164. System.out.println("array sum: " + sum);
  165. System.out.flush();
  166.  
  167. }
  168.  
  169. static class Foo
  170. {
  171. int size, mask, bit;
  172. int[][] buf;
  173. public Foo(int bit) {
  174. this.bit = bit;
  175. size = 1 << (bit & 0xF);
  176. mask = size - 1;
  177. buf = new int[1][];
  178. buf[0] = new int[size];
  179. }
  180. public void put(int index, int value) {
  181. int y = index >> bit;
  182. if (y >= buf.length) {
  183. buf = Arrays.copyOf(buf, y + 1);
  184. }
  185. if (buf[y] == null) {
  186. buf[y] = new int[size];
  187. }
  188. buf[y][index & mask] = value;
  189. }
  190. public int get(int index) {
  191. int y = index >> bit;
  192. if (y < buf.length) {
  193. if (buf[y] != null) {
  194. return buf[y][index & mask];
  195. }
  196. }
  197. return 0;
  198. }
  199. }
  200. }
Success #stdin #stdout 0.16s 320576KB
stdin
Standard input is empty
stdout
:::::::::::::::::::::
TEST COUNT: 5000
SIZEBIT: 10
SIZE: 1024
foo addNew time:    1232499
foo update time:    909633
foo get time:       3318382
foo sum:            74985000
list addNew time:   2545076
list update time:   2644639
list get time:      4837119
list sum:           74985000
buffer addNew time: 1628191
buffer update time: 878116
buffer get time:    4267295
buffer sum:         74985000
array addNew time:  353806
array update time:  213796
array get time:     3405739
array sum:          74985000
:::::::::::::::::::::
TEST COUNT: 5000
SIZEBIT: 8
SIZE: 256
foo addNew time:    502845
foo update time:    534361
foo get time:       247012
foo sum:            74985000
list addNew time:   739041
list update time:   998719
list get time:      339682
list sum:           74985000
buffer addNew time: 929865
buffer update time: 508711
buffer get time:    242412
buffer sum:         74985000
array addNew time:  775612
array update time:  219280
array get time:     133317
array sum:          74985000
:::::::::::::::::::::
TEST COUNT: 5000
SIZEBIT: 5
SIZE: 32
foo addNew time:    327470
foo update time:    110553
foo get time:       55605
foo sum:            74985000
list addNew time:   245934
list update time:   145882
list get time:      18277
list sum:           74985000
buffer addNew time: 1538171
buffer update time: 117024
buffer get time:    74095
buffer sum:         74985000
array addNew time:  2969085
array update time:  8050
array get time:     6196
array sum:          74985000