Monthly Archives: Декабрь 2013

Получение MD5 хэша на Java

Первый вариант (которым я пользуюсь):

public static final String md5(final String text){
	try{
		MessageDigest md = MessageDigest.getInstance("MD5");
		md.update(text.getBytes());
		String hash = new BigInteger(1, md.digest()).toString(16);
		while(hash.length() < 32) hash = "0" + hash;
		return hash;
	}catch(NoSuchAlgorithmException e){
		e.printStackTrace();
	}
	return "";
}

Второй вариант:

public static final String md5(final String s) {
    try {
        // Create MD5 Hash
        MessageDigest digest = java.security.MessageDigest
                .getInstance("MD5");
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();
 
        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < messageDigest.length; i++) {
            String h = Integer.toHexString(0xFF & messageDigest[i]);
            while (h.length() < 2)
                h = "0" + h;
            hexString.append(h);
        }
        return hexString.toString();
 
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}

Сортировка слиянием на Java

Реализация сортировки слиянием на Java:

//рекурсивная функция сортировки частей массива
public static int[] sort(int[] arr){
	if(arr.length < 2) return arr;
	int m = arr.length / 2;
	int[] arr1 = Arrays.copyOfRange(arr, 0, m);
	int[] arr2 = Arrays.copyOfRange(arr, m, arr.length);
	return merge(sort(arr1), sort(arr2));
}
//слияние двух массивов в один отсортированный
public static int[] merge(int[] arr1,int arr2[]){
	int n = arr1.length + arr2.length;
	int[] arr = new int[n];
	int i1=0;
	int i2=0;
	for(int i=0;i<n;i++){
		if(i1 == arr1.length){
			arr[i] = arr2[i2++];				
		}else if(i2 == arr2.length){
			arr[i] = arr1[i1++];
		}else{
			if(arr1[i1] < arr2[i2]){
				arr[i] = arr1[i1++];
			}else{
				arr[i] = arr2[i2++];
			}
		}
	}
	return arr;
}

Пример использования:

int[] arr ={2,1,0,6,1,9,8,7};//тестовый массив
System.out.println(Arrays.toString(arr));//вывод на экран исходного массива
int[] sortArr = sort(arr);//сортировка
System.out.println(Arrays.toString(sortArr));//вывод на экран отсортированного массива

Простые числа (Решето Эратосфена)

Нахождение простых чисел методом «Решето Эратосфена»
Реализация на Java:

public class Primes {
 
	private boolean primes[];
 
	public Primes(int number){
		primes = new boolean[number+1];		
		Arrays.fill(primes, true);
		primes[0] = false;
		primes[1] = false;
		for(int i = 2;i*i < number;i++){
			if(primes[i]){
				for(int j=i*i;j < number;j+=i){
					primes[j] = false;
				}
			}
		}
 
	}
 
	public boolean check(int number){
		return primes[number];
	}
 
}

Применение:

int N = 100;
Primes primes = new Primes(N);
for(int i=0;i<N;i++){
	if(primes.check(i)){
		System.out.println(i + " ");	
	}
}

ArrayUtils — методы по работе с массивами

Методы по работе с массивами

public class ArrayUtils {
 
	//сумма элементов int массива
	public static int sum(int[] arr){
		int sum = 0;
		for(int i : arr) sum += i;
		return sum;
	}
 
	//сумма элементов long массива	
	public static long sum(long[] arr){
		long sum = 0;
		for(long l : arr) sum += l;
		return sum;
	}
 
	//сумма элементов double массива	
	public static double sum(double[] arr){
		double sum = 0;
		for(double d : arr) sum += d;
		return sum;
	}
 
	//максимальный элемент в int массива
	public static int max(int[] arr){
		int max = Integer.MIN_VALUE;
		for(int i : arr) if(i > max) max = i;
		return max;
	}
 
	//максимальный элемент в long массиве
	public static long max(long[] arr){
		long max = Long.MIN_VALUE;
		for(long l : arr) if(l > max) max = l;
		return max;
	}
 
	//максимальный элемент в double массиве
	public static double max(double[] arr){
		double max = Double.MIN_VALUE;
		for(double d : arr) if(d > max) max = d;
		return max;
	}
 
	//минимальный элемент в int массиве
	public static int min(int[] arr){
		int min = Integer.MAX_VALUE;
		for(int i : arr) if(i < min) min = i;
		return min;
	}
 
	//минимальный элемент в long массиве
	public static long min(long[] arr){
		long min = Long.MAX_VALUE;
		for(long l : arr) if(l < min) min = l;
		return min;
	}
 
	//минимальный элемент в double массиве
	public static double min(double[] arr){
		double min = Double.MAX_VALUE;
		for(double d : arr) if(d < min) min = d;
		return min;
	}
 
	//индекс максимального элемента в int массиве
	public static int maxIndex(int[] arr){
		int p = -1;
		int len = arr.length;
		if(len > 0){
			p = 0;
			for(int i = 1; i < len; i++) 
				if(arr[i] > arr[p]) 
					p = i;
		}
		return p;
	}
 
	//индекс максимального элемента в long массиве
	public static int maxIndex(long[] arr){
		int p = -1;
		int len = arr.length;
		if(len > 0){
			p = 0;
			for(int i = 1; i < len; i++)
				if(arr[i] > arr[p])
					p = i;
		}
		return p;
	}
 
 
	//индекс максимального элемента в double массиве
	public static int maxIndex(double[] arr){
		int p = -1;
		int len = arr.length;
		if(len > 0){
			p = 0;
			for(int i = 1; i < len; i++)
				if(arr[i] > arr[p])
					p = i;
		}
		return p;
	}
 
	//индекс минимального элемента в int массиве
	public static int minIndex(int[] arr){
		int p = -1;
		int len = arr.length;
		if(len > 0){
			p = 0;
			for(int i = 1; i < len; i++) 
				if(arr[i] < arr[p]) 
					p = i;
		}
		return p;
	}
 
	//индекс минимального элемента в long массиве
	public static int minIndex(long[] arr){
		int p = -1;
		int len = arr.length;
		if(len > 0){
			p = 0;
			for(int i = 1; i < len; i++)
				if(arr[i] < arr[p])
					p = i;
		}
		return p;
	}
 
 
	//индекс минимального элемента в double массиве
	public static int minIndex(double[] arr){
		int p = -1;
		int len = arr.length;
		if(len > 0){
			p = 0;
			for(int i = 1; i < len; i++)
				if(arr[i] < arr[p])
					p = i;
		}
		return p;
	}
 
 
}