Mega Code Archive

 
Categories / Java / Development Class
 

Functions for Statistics

/*  * Copyright WizTools.org  * Licensed under the Apache License, Version 2.0:  * http://www.apache.org/licenses/LICENSE-2.0  */ //package org.wiztools.commons; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; /**  *  * @author subWiz  */ public final class Statistics {     private Statistics() {}     private static final String LOG_ARRAY_LENGTH_0 = "Length of array cannot be 0!";     /* MEAN */     public static int mean(final int[] list) throws IllegalArgumentException {         if(list.length == 0) {             throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);         }         int sum = 0;         for(int n: list) {             sum += n;         }         return sum / list.length;     }     public static long mean(final long[] list) throws IllegalArgumentException {         if(list.length == 0) {             throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);         }         long sum = 0;         for(long n: list) {             sum += n;         }         return sum / list.length;     }     public static float mean(final float[] list) throws IllegalArgumentException {         if(list.length == 0) {             throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);         }         float sum = 0;         for(float n: list) {             sum += n;         }         return sum / list.length;     }     public static double mean(final double[] list) throws IllegalArgumentException {         if(list.length == 0) {             throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);         }         float sum = 0;         for(double n: list) {             sum += n;         }         return sum / list.length;     }     /* MEDIAN */     public static int median(final int[] list) throws IllegalArgumentException {         if(list.length < 1) {             throw new IllegalArgumentException();         }         Arrays.sort(list);         if((list.length % 2) == 0) { // is even             final int idx = list.length / 2;             return (list[idx] + list[idx-1]) / 2;         }         else { // is odd             final int idx = list.length / 2;             return list[idx];         }     }     /* MODE */     private static class ModeCompute <T extends Number> {         private Map<T, Integer> map = new HashMap<T, Integer>();         private int maxFrequency = 0;         void add(T t) {             final int count = (map.get(t) == null)? 1: (map.get(t) + 1);             // Update map:             map.put(t, count);             // Update maxFrequency:             if(count > maxFrequency)                 maxFrequency = count;         }         List<T> getMode() {             List<T> out = new ArrayList<T>();             for(Map.Entry<T, Integer> entry: map.entrySet()) {                 if(entry.getValue() == maxFrequency) {                     out.add(entry.getKey());                 }             }             return out;         }     }     public static int[] mode(final int[] list) throws IllegalArgumentException {         if(list.length == 0) {             throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);         }         final ModeCompute<Integer> modeComp = new ModeCompute<Integer>();         for(int i=0; i<list.length; i++) {             modeComp.add(list[i]);         }         final List<Integer> l = modeComp.getMode();         // Prepare the output array:         final int[] out = new int[l.size()];         Iterator<Integer> itr = l.iterator();         for(int i=0; i<out.length; i++) {             out[i] = itr.next();         }         return out;     } }