. O (n), HashSet. Hashing - .
25M , ~ 2 - O (n log n) - , . OTOH, , : -
BitMap (~ 1 ), ((0x7FFF_FFFF + 1)/8 - , ), . , - .
, . , Java. , .
public class Duplicate {
public static void main(String[] args) throws Exception {
Random r = new Random( 100L );
int[] a = new int[25000000];
Set<Integer> set = new HashSet<>(a.length/2);
boolean dupl = true;
for( int i = 0; i < a.length; ){
int x = Math.abs( r.nextInt() );
if( set.add( x ) ){
a[i++] = x;
}
}
a[a.length-1] = a[0];
set = null;
System.out.println( "hash " + new Date() );
set = new HashSet<>();
for( int i = 0; i < a.length; ++i ){
if( ! set.add( a[i] ) ){
System.out.println( a[i] );
break;
}
}
set = null;
System.out.println( "bitmap " + new Date() );
BitSet bs = new BitSet( 0x7FFF_FFFF );
for( int i = 0; i < a.length; ++i ){
if( bs.get( a[i]-1 ) ){
System.out.println( a[i] );
break;
}
bs.set( a[i]-1 );
}
System.out.println( "sort " + new Date());
Arrays.sort( a );
for( int i = 1; i < a.length; ++ i ){
if( a[i] == a[i-1] ){
System.out.println( a[i] );
break;
}
}
System.out.println( "done " + new Date() );
}
}
, Java 8 Arrays.sortParallel. , HW, . - , " ". , , , "" w.r.t. Java java.util.