Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.suai;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.Random;
- public class Main {
- public static void main(String[] args) {
- ArrayList<Integer> list = new ArrayList<>(150000);
- Random ran = new Random();
- for (int i = 0; i < 150000; i++){
- list.add(ran.nextInt(100));
- }
- System.out.println(list);
- FindNumber f = new FindNumber(list);
- BigDecimal timeStart = new BigDecimal( System.nanoTime());
- int res1 = f.calcOccurenceNum(list, 13, 4);
- BigDecimal nanos = new BigDecimal( System.nanoTime()).subtract(timeStart);
- BigDecimal millis = nanos.divide(new BigDecimal(1000000));
- System.out.println(millis+" ms --- fast");
- System.out.println(res1);
- BigDecimal timeStart2 = new BigDecimal( System.nanoTime());
- int res2 = f.findSlow(13);
- BigDecimal nanos2 = new BigDecimal( System.nanoTime()).subtract(timeStart2);
- BigDecimal millis2 = nanos2.divide(new BigDecimal(1000000));
- System.out.println(millis2+" ms --- slow");
- System.out.println(res2);
- }
- }
- ///////////////////////////////////////// FINDNUMBER.JAVA
- package com.suai;
- import java.util.ArrayList;
- public class FindNumber {
- private ArrayList<Integer> list;
- public FindNumber(ArrayList list){
- this.list = list;
- }
- public int findSlow(int number){
- int res = 0;
- for (int i = 0; i < list.size(); i++){
- if (list.get(i) == number) res++;
- }
- return res;
- }
- public int calcOccurenceNum(ArrayList list, int number, int threadNum){
- int x = list.size() / threadNum;
- int results = 0;
- WorkerThread[] wt = new WorkerThread[threadNum];
- for (int i = 0; i < threadNum; i++){
- wt[i] = new WorkerThread(list, i*x, (((i+1)*x)-1), number);
- wt[i].start();
- }
- try {
- for (int i = 0; i < threadNum; i++) {
- wt[i].join();
- results += wt[i].getResult();
- }
- }
- catch (InterruptedException e) {
- e.printStackTrace();
- }
- return results;
- }
- }
- /////////////////////////////////////////////////////////WORKERTHREAD.JAVA
- package com.suai;
- import java.util.ArrayList;
- public class WorkerThread extends Thread{
- private ArrayList<Integer> list;
- private int first;
- private int last;
- private int res;
- private int number;
- public WorkerThread(ArrayList x, int first, int last, int number){
- list = x;
- this.first = first;
- this.last = last;
- this.number = number;
- }
- public void run(){
- for (int i = first; i <= last; i++){
- if (list.get(i) == number) res++;
- }
- }
- public int getResult(){
- return res;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement