Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. package com.suai;
  2.  
  3. import java.math.BigDecimal;
  4. import java.util.ArrayList;
  5. import java.util.Random;
  6.  
  7. public class Main {
  8.  
  9. public static void main(String[] args) {
  10. ArrayList<Integer> list = new ArrayList<>(150000);
  11. Random ran = new Random();
  12. for (int i = 0; i < 150000; i++){
  13. list.add(ran.nextInt(100));
  14. }
  15. System.out.println(list);
  16. FindNumber f = new FindNumber(list);
  17. BigDecimal timeStart = new BigDecimal( System.nanoTime());
  18. int res1 = f.calcOccurenceNum(list, 13, 4);
  19. BigDecimal nanos = new BigDecimal( System.nanoTime()).subtract(timeStart);
  20. BigDecimal millis = nanos.divide(new BigDecimal(1000000));
  21. System.out.println(millis+" ms --- fast");
  22. System.out.println(res1);
  23. BigDecimal timeStart2 = new BigDecimal( System.nanoTime());
  24. int res2 = f.findSlow(13);
  25. BigDecimal nanos2 = new BigDecimal( System.nanoTime()).subtract(timeStart2);
  26. BigDecimal millis2 = nanos2.divide(new BigDecimal(1000000));
  27. System.out.println(millis2+" ms --- slow");
  28. System.out.println(res2);
  29. }
  30. }
  31.  
  32. ///////////////////////////////////////// FINDNUMBER.JAVA
  33. package com.suai;
  34. import java.util.ArrayList;
  35.  
  36. public class FindNumber {
  37. private ArrayList<Integer> list;
  38.  
  39. public FindNumber(ArrayList list){
  40. this.list = list;
  41. }
  42.  
  43. public int findSlow(int number){
  44. int res = 0;
  45. for (int i = 0; i < list.size(); i++){
  46. if (list.get(i) == number) res++;
  47. }
  48. return res;
  49. }
  50.  
  51. public int calcOccurenceNum(ArrayList list, int number, int threadNum){
  52. int x = list.size() / threadNum;
  53. int results = 0;
  54. WorkerThread[] wt = new WorkerThread[threadNum];
  55. for (int i = 0; i < threadNum; i++){
  56. wt[i] = new WorkerThread(list, i*x, (((i+1)*x)-1), number);
  57. wt[i].start();
  58. }
  59. try {
  60. for (int i = 0; i < threadNum; i++) {
  61. wt[i].join();
  62. results += wt[i].getResult();
  63. }
  64. }
  65. catch (InterruptedException e) {
  66. e.printStackTrace();
  67. }
  68. return results;
  69. }
  70.  
  71. }
  72. /////////////////////////////////////////////////////////WORKERTHREAD.JAVA
  73. package com.suai;
  74. import java.util.ArrayList;
  75.  
  76. public class WorkerThread extends Thread{
  77. private ArrayList<Integer> list;
  78. private int first;
  79. private int last;
  80. private int res;
  81. private int number;
  82.  
  83. public WorkerThread(ArrayList x, int first, int last, int number){
  84. list = x;
  85. this.first = first;
  86. this.last = last;
  87. this.number = number;
  88. }
  89.  
  90. public void run(){
  91. for (int i = first; i <= last; i++){
  92. if (list.get(i) == number) res++;
  93. }
  94. }
  95.  
  96. public int getResult(){
  97. return res;
  98. }
  99.  
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement