Java Arrays类方法
2023-09-11 14:17:19 时间
1:概述
主要谈一谈 Java使用fork/koin类 实现的并发排序 以及对于Stream流的支持的splitetor
- mismatch() -> 寻找两个数组 第一次出现数据不一致的下标
- parallelPrefix() -> 对数组进行,累加求和
- parallelSetAll() -> 对数组进行置数,
- parallelSort() -> 并行排序
- Spliterator() -> 对数组进行切分(切分后的数据为所有的数据的组合)
- 奇数 x/2+1 11->6
- 偶数 x/2 10 ==>5
public class Use_Arrays { @Test public void test_mismatch() { int []x =new int[] {1,2,3,4}; int []y =new int[] {1,3,4,5}; int index = Arrays.mismatch(x, y); System.out.println(index); } @Test public void test_parallelPrefix() { int []x =new int[] {1,2,3,4}; //f2=f1+f2 //f3=f2+f3 Arrays.parallelPrefix(x, (k,v)->k+v); System.out.println(Arrays.toString(x)); // 实现1-100累加求和 int []y =new int[100]; Arrays.parallelSetAll(y, k->k=1); Arrays.parallelPrefix(y, (k,v)->k+v); System.out.println(Arrays.toString(y)); } @Test public void test_parallelSetAll() { int []x =new int[100]; x[0]=1; Arrays.parallelSetAll(x, y->y+1); System.out.println(Arrays.toString(x)); } @Test public void test_parallSort() { IntStream stream = new Random().ints(0, 1000).limit(1000); int[] array = stream.toArray(); System.out.println(Arrays.toString(array)); Arrays.parallelSort(array); System.out.println(Arrays.toString(array)); } @Test public void test_spliterator() { int []x =new int[11]; Arrays.parallelSetAll(x, k->k+=1); System.out.println(Arrays.toString(x)); Spliterator.OfInt int0_100 = Arrays.spliterator(x); int [] y=new int[(int) int0_100.estimateSize()]; int i=0; System.out.println(int0_100.estimateSize()); System.out.println(int0_100.characteristics()); System.out.println(int0_100.getExactSizeIfKnown()); //spliterator.forEachRemaining((int k)->System.out.println(k)); OfInt int1_50 = int0_100.trySplit(); OfInt int2_25 = int1_50.trySplit(); int0_100.forEachRemaining((int k)->System.out.print(k+" ")); System.out.println(); int1_50.forEachRemaining((int k)->System.out.print(k+" ")); System.out.println(); int2_25.forEachRemaining((int k)->System.out.print(k+" ")); } }
2:使用Spliterator实现并行输出
@Test public void definied_Sort() { IntStream stream = new Random().ints(0, 100).limit(100); int[] array = stream.toArray(); Arrays.sort(array); final int NUMS=3;// 切分的次数 ExecutorService thread_pool = Executors.newFixedThreadPool(10); Spliterator.OfInt cut1 = Arrays.spliterator(array); while(!thread_pool.isTerminated()) { thread_pool.submit(()->{ OfInt split = cut1.trySplit(); thread_pool.shutdown(); split.forEachRemaining((int k)->System.out.print(k+" ")); System.out.println(); }); } }
相关文章
- java高级用法之:JNA类型映射应该注意的问题
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- Java 文档注释、类型转换、包装类
- Java核心技术卷I基础知识2.1.2 设置JDK
- JAVA面试集合-2020最全
- 各大厂800道Java后端经典面试题合集
- 【Java】java数据库连接池配置的几种方法
- 11 Java的方法 递归
- JAVA线程sleep和wait方法区别
- java--方法重写与重载
- 基于Java+MySQL实现的(Web)科研资讯推送系统【100010149】
- Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
- Java 静态泛型方法为什么要在返回值之前使用泛型
- java读取大文件 超大文件的几种方法
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- java安全编码指南之:敏感类的拷贝
- 【Java数据结构与算法】LeetCode 0019. 删除链表的倒数第N个结点
- JAVA学习.java.sql.date 与java.util.date以及gettime()方法的分析
- Java抽象类和抽象方法例子
- java泛型(泛型接口、泛型类、泛型方法)