/** * Add a new value to the list but don't employ a wrapper. * * @param integer new value * @return was able to add. */ public LongList add(long integer) { if (end + 1 >= values.length) { values = grow(values); } values[end] = integer; end++; return this; }
@Override public int hashCode() { int result = 131313; result = 31 * result + (values != null ? Lng.hashCode(0, end, values) : 0); result = 31 * result + end; return result; }
/** * max * @param values values in int * @return max */ public static long max( long[] values ) { return max(values, 0, values.length); }
@Universal public static long[] slc( long[] array, int startIndex, int endIndex ) { final int start = calculateIndex( array, startIndex ); final int end = calculateEndIndex( array, endIndex ); final int newLength = end - start; if ( newLength < 0 ) { throw new ArrayIndexOutOfBoundsException( String.format( "start index %d, end index %d, length %d", startIndex, endIndex, array.length ) ); } long[] newArray = new long[ newLength ]; System.arraycopy( array, start, newArray, 0, newLength ); return newArray; }
@Universal public static long[] insert( final long[] array, final int idx, final long v ) { Exceptions.requireNonNull( array ); if ( idx >= array.length ) { return add( array, v ); } final int index = calculateIndex( array, idx ); //Object newArray = Array.newInstance(array.getClass().getComponentType(), array.length+1); long[] newArray = new long[ array.length + 1 ]; if ( index != 0 ) { /* Copy up to the length in the array before the index. */ /* src sbegin dst dbegin length of copy */ System.arraycopy( array, 0, newArray, 0, index ); } boolean lastIndex = index == array.length - 1; int remainingIndex = array.length - index; if ( lastIndex ) { /* Copy the area after the insert. Make sure we don't write over the end. */ /* src sbegin dst dbegin length of copy */ System.arraycopy( array, index, newArray, index + 1, remainingIndex ); } else { /* Copy the area after the insert. */ /* src sbegin dst dbegin length of copy */ System.arraycopy( array, index, newArray, index + 1, remainingIndex ); } newArray[ index ] = v; return newArray; }
@Universal public static long atIndex( final long[] array, final int index ) { final int i = calculateIndex( array, index ); return array[ i ]; }
/** * Internal to avoid rounding errors * @param values values * @param start start * @param length length * @return double value */ public static double varianceDouble(long[] values, final int start, final int length) { double mean = meanDouble(values, start, length); double temp = 0; for(int index = start; index < length; index++) { double a = values[index]; temp += (mean-a)*(mean-a); } return temp / length; }
/** * median * * @return median */ public long median() { return Lng.median(values, end); }
@Universal public static long[] slcEnd( long[] array, int endIndex ) { final int end = calculateEndIndex( array, endIndex ); final int newLength = end; // + (endIndex < 0 ? 1 : 0); if ( newLength < 0 ) { throw new ArrayIndexOutOfBoundsException( String.format( "start index %d, length %d", endIndex, array.length ) ); } long[] newArray = new long[ newLength ]; System.arraycopy( array, 0, newArray, 0, newLength ); return newArray; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; LongList longs = (LongList) o; if (end != longs.end) return false; if (!Lng.equals(0, end, values, longs.values)) return false; return true; }
/** * Mean * * @return mean */ public long mean() { return Lng.mean(values, end); }
@Universal public static long[] sliceOf( long[] array, int startIndex, int endIndex ) { final int start = calculateIndex( array, startIndex ); final int end = calculateEndIndex( array, endIndex ); final int newLength = end - start; if ( newLength < 0 ) { throw new ArrayIndexOutOfBoundsException( String.format( "start index %d, end index %d, length %d", startIndex, endIndex, array.length ) ); } long[] newArray = new long[ newLength ]; System.arraycopy( array, start, newArray, 0, newLength ); return newArray; }
@Universal public static long[] insert( final long[] array, final int idx, final long v ) { Exceptions.requireNonNull( array ); if ( idx >= array.length ) { return add( array, v ); } final int index = calculateIndex( array, idx ); //Object newArray = Array.newInstance(array.getClass().getComponentType(), array.length+1); long[] newArray = new long[ array.length + 1 ]; if ( index != 0 ) { /* Copy up to the length in the array before the index. */ /* src sbegin dst dbegin length of copy */ System.arraycopy( array, 0, newArray, 0, index ); } boolean lastIndex = index == array.length - 1; int remainingIndex = array.length - index; if ( lastIndex ) { /* Copy the area after the insert. Make sure we don't write over the end. */ /* src sbegin dst dbegin length of copy */ System.arraycopy( array, index, newArray, index + 1, remainingIndex ); } else { /* Copy the area after the insert. */ /* src sbegin dst dbegin length of copy */ System.arraycopy( array, index, newArray, index + 1, remainingIndex ); } newArray[ index ] = v; return newArray; }
@Universal public static void idx( final long[] array, int index, long value ) { final int i = calculateIndex( array, index ); array[ i ] = value; }
/** * Internal to avoid rounding errors * @param values values * @param start start * @param length length * @return double value */ public static double varianceDouble(long[] values, final int start, final int length) { double mean = meanDouble(values, start, length); double temp = 0; for(int index = start; index < length; index++) { double a = values[index]; temp += (mean-a)*(mean-a); } return temp / length; }
/** * Calculate Median * @param values values * @param length length * @return median */ public static long median(long[] values, final int length) { return median(values, 0, length); }
@Universal public static long[] endSliceOf( long[] array, int endIndex ) { final int end = calculateEndIndex( array, endIndex ); final int newLength = end; // + (endIndex < 0 ? 1 : 0); if ( newLength < 0 ) { throw new ArrayIndexOutOfBoundsException( String.format( "start index %d, length %d", endIndex, array.length ) ); } long[] newArray = new long[ newLength ]; System.arraycopy( array, 0, newArray, 0, newLength ); return newArray; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; LongList longs = (LongList) o; if (end != longs.end) return false; if (!Lng.equals(0, end, values, longs.values)) return false; return true; }
/** * Mean * * @return mean */ public long mean() { return Lng.mean(values, end); }
@Universal public static long[] slc( long[] array, int startIndex, int endIndex ) { final int start = calculateIndex( array, startIndex ); final int end = calculateEndIndex( array, endIndex ); final int newLength = end - start; if ( newLength < 0 ) { throw new ArrayIndexOutOfBoundsException( String.format( "start index %d, end index %d, length %d", startIndex, endIndex, array.length ) ); } long[] newArray = new long[ newLength ]; System.arraycopy( array, start, newArray, 0, newLength ); return newArray; }