Java 8 Arrays Parallel Sort并行排序实例

x33g5p2x  于2022-09-28 转载在 Java  
字(4.3k)|赞(0)|评价(0)|浏览(393)

在本文中,我们将提供 java 8 Arrays 并行排序示例。 Java 8 在 Arrays 类中引入了一个新方法 parallelSort()。明智地找到细节点。
1.:Java 8 Arrays.parallelSort() 使用并行排序合并算法,将数组分解为子数组,然后对它们本身进行排序和合并。
2.:数组被分解成子数组,子数组又被分解成另一个子数组,一直持续到子数组的长度达到最小粒度。
3.:经过多次分区,一旦子数组达到最小粒度,则使用 Arrays.sort() 对它们进行排序。
4.Arrays.sort() 使用 Dual-Pivot Quicksort 算法对元素进行排序。
5.Arrays.parallelSort() 使用的所有并行任务都由ForkJoin 公共池执行。
6.Arrays.parallelSort() 对完整数组或给定 to 和 from 索引之间的元素进行排序。
7.:如果数组的大小小于最小粒度,则不进行并行处理。

Arrays.parallelSort() 方法说明

找到Arrays.parallelSort()的方法说明
1.:查找以自然顺序对整个数组进行排序的方法。对象必须是 Comparable

void parallelSort(T[] a)

2.:它对 from 和 to 索引之间的元素进行排序。对象必须是 Comparable

void parallelSort(T[] a, int fromIndex, int toIndex)

3.:它对整个数组进行排序。根据给定的 Comparator 对象执行排序。

void parallelSort(T[] a, Comparator<? super T> cmp)

4.:它对 from 和 to 索引之间的元素进行排序。根据给定的 Comparator 对象执行排序。

void parallelSort(T[] a, int fromIndex, int toIndex, Comparator<? super T> cmp)

5.Arrays.parallelSort() 也用于原始数据类型。

Arrays.parallelSort() 与 Comparable

ParallelSortWithComparable.java

package com.concretepage;
import java.util.Arrays;
import java.util.function.Consumer;
public class ParallelSortWithComparable {
	public static void main(String[] args) {
		User[] users = User.getUsers();
		System.out.println("--Sort complete array--");
		Arrays.parallelSort(users);
		Consumer&ltUser> printUser = u-> System.out.println(u.getName()+"-"+u.getAge());
		Arrays.stream(users).forEach(printUser);		
		System.out.println("--Sort array from index 1 to 4--");
		users = User.getUsers();
		Arrays.parallelSort(users, 1, 4);
		Arrays.stream(users).forEach(printUser);
	}
}

用户.java

package com.concretepage;
public class User implements Comparable&ltUser> {
	private String name;
	private int age;	
	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	@Override
	public int compareTo(User user) {
		return name.compareTo(user.name);
	}
	public static User[] getUsers() {
		User[] users = new User[6];
		users[0] = new User ("Ram", 25);
		users[1] = new User ("Shyam", 22);
		users[2] = new User ("Mohan", 21);
		users[3] = new User ("Suresh", 30);
		users[4] = new User ("Ramesh", 20);
		users[5] = new User ("Dinesh", 27);
		return users;
	}
}

输出

--Sort complete array--
Dinesh-27
Mohan-21
Ram-25
Ramesh-20
Shyam-22
Suresh-30
--Sort array from index 1 to 4--
Ram-25
Mohan-21
Shyam-22
Suresh-30
Ramesh-20
Dinesh-27

Arrays.parallelSort() 和Comparator

ParallelSortWithComparator.java

package com.concretepage;
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.Consumer;
public class ParallelSortWithComparator {
	public static void main(String[] args) {
		User[] users = User.getUsers();
		Comparator&ltUser> ageComparator = Comparator.comparing(User::getAge);
		System.out.println("--Sort complete array--");
		Arrays.parallelSort(users, ageComparator);
		Consumer&ltUser> printUser = u-> System.out.println(u.getName()+"-"+u.getAge());
		Arrays.stream(users).forEach(printUser);
		System.out.println("--Sort array from index 1 to 4--");
		users = User.getUsers();
		Arrays.parallelSort(users, 1, 4, ageComparator);
		Arrays.stream(users).forEach(printUser);
	}
}

输出

--Sort complete array--
Ramesh-20
Mohan-21
Shyam-22
Ram-25
Dinesh-27
Suresh-30
--Sort array from index 1 to 4--
Ram-25
Mohan-21
Shyam-22
Suresh-30
Ramesh-20
Dinesh-27

Arrays.parallelSort()原始数据类型

ParallelSortWithPrimitiveDataType.java

package com.concretepage;
import java.util.Arrays;
import java.util.function.DoubleConsumer;
import java.util.function.IntConsumer;
public class ParallelSortWithPrimitiveDataType {
	public static void main(String[] args) {
		int[] num1 = {3, 6, 2, 10, 4, 1, 7};
		System.out.println("--Sort complete Integer array--");
		Arrays.parallelSort(num1);
		IntConsumer  printInt = i -> System.out.print(i+" ");
		Arrays.stream(num1).forEach(printInt);
		System.out.println("\n--Sort Integer array from index 1 to 5--");
		int[] num2 = {3, 6, 2, 10, 4, 1, 7};
		Arrays.parallelSort(num2, 1, 5);
		Arrays.stream(num1).forEach(printInt);		
		
		double[] db1 = {3.5, 1.2, 6.7, 8.9, 0.6, 2.3, 5.5};
		System.out.println("\n--Sort complete Double array--");
		Arrays.parallelSort(db1);
		DoubleConsumer  printDB = d -> System.out.print(d+" ");
		Arrays.stream(db1).forEach(printDB);
		System.out.println("\n--Sort Double array from index 1 to 5--");
		double[] db2 = {3.5, 1.2, 6.7, 8.9, 0.6, 2.3, 5.5};
		Arrays.parallelSort(db2, 1, 5);
		Arrays.stream(db2).forEach(printDB);	
	}
}

输出

--Sort complete Integer array--
1 2 3 4 6 7 10 
--Sort Integer array from index 1 to 5--
1 2 3 4 6 7 10 
--Sort complete Double array--
0.6 1.2 2.3 3.5 5.5 6.7 8.9 
--Sort Double array from index 1 to 5--
3.5 0.6 1.2 6.7 8.9 2.3 5.5

相关文章