首页 > 编程语言 >Java数组工具类Arrays

Java数组工具类Arrays

时间:2022-11-13 18:45:23浏览次数:32  
标签:Java Arrays System int 数组 println new out

Arrays所在的包是Java.util.*,Arrays提供的全部是static方法。

1.转字符串

1.1 一维数组--public static String toString(int[] a)

参数即可以是基础类型数组,也可以是包装类型数组,也可以是对象数组。

// 一维数组转字符串
int[] arrays = new int[]{1,2,3,4,5};
System.out.println(Arrays.toString(arrays)); // [1,2,3,4,5]

1.2.二维数组--public static String deepToString(Object[] a)

// 二维数组转字符串
int[][] arrays2 = new int[][]{{1,2,3,4,5}, {6,7,8,9,10}};
System.out.println(Arrays.deepToString(arrays2)); // [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]

2.转列表

2.1 一维数组--public static List asList(T... a)

2.1.1 泛型参数

// 一维数组转转列表(泛型参数:基础类型数组要转为包装类型数组)
int[] arrays3 = new int[]{1,2,3,4,5};
System.out.println(Arrays.asList(arrays3)); // 对象(基础类型无法泛型化,对象可以泛型化)

Integer[] arrays4 = new Integer[]{1,2,3,4,5};
System.out.println(Arrays.asList(arrays4)); // [1,2,3,4,5]

2.1.2 改变列表长度

// 一维数组转转列表(改变列表长度:会抛异常,通过new ArrayList规避)
Integer[] arrays5 = new Integer[]{1,2,3,4,5};
List<Integer> list = Arrays.asList(arrays5);
// list.add(6); // 抛异常(无法修改长度)
// list.remove(); // 抛异常(无法修改长度)

List<Integer> list2 = new ArrayList<>(Arrays.asList(arrays5)); // 修改长度的方法
list2.add(6);
System.out.println(list2); // [1,2,3,4,5,6]

2.1.3 改变列表内容

// 一维数组转转列表(改变列表内容:数组同时变化)
Integer[] arrays6 = new Integer[]{1,5,2,3,4};
List<Integer> list3 = new ArrayList<>(Arrays.asList(arrays6));
list3.sort(Comparator.naturalOrder());
System.out.println(list3); // [1,2,3,4,5,6]
System.out.println(arrays6); // [1, 2, 3, 4, 5]

2.2 二维数组--public static List asList(T... a)

// 二维数组转列表
Integer[][] arrays7 = new Integer[][]{{1,2,3,4,5}, {6,7,8,9,10}};
List<Integer[]> list4 = Arrays.asList(arrays7);
System.out.println(list4);

3.相等

3.1 一维数组--public static boolean equals(int[] a, int[] a2)

// 一维数组判断是否相等:顺序和值都相同
int[] arrays = new int[]{1,2,3,4,5};
int[] arrays2 = new int[]{1,2,3,5,4};
int[] arrays3 = new int[]{1,2,3,4,5};
System.out.println(Arrays.equals(arrays,arrays2)); // false
System.out.println(Arrays.equals(arrays,arrays3)); // true

3.2 二维数组--public static boolean deepEquals(Object[] a1, Object[] a2)

// 二维数组判断是否相等:顺序和值都相同
Integer[][] arrays4 = new Integer[][]{{1,2,3,4,5}, {6,7,8,9,10}};
Integer[][] arrays5 = new Integer[][]{{1,2,3,5,4}, {6,7,8,9,10}};
Integer[][] arrays6 = new Integer[][]{{1,2,3,4,5}, {6,7,8,9,10}};
System.out.println(Arrays.equals(arrays4,arrays5)); // false
System.out.println(Arrays.deepEquals(arrays4,arrays5)); // false
System.out.println(Arrays.deepEquals(arrays4,arrays6)); // true

4.填充

4.1 一维数组--public static void fill(boolean[] a, boolean val)

4.1.1 给空数组填充

// 给空数组填充,还是空数组
int[] arrays = new int[]{};
Arrays.fill(arrays, 1);
System.out.println(Arrays.toString(arrays)); // []

4.1.2 给非空数组填充(全部填充/部分填充)

// 全部填充
Integer[] arrays2 = new Integer[]{1,2,3,4,5};
Arrays.fill(arrays2, 1);
System.out.println(Arrays.toString(arrays2)); // [1, 1, 1, 1, 1]

// 部分填充
int[] arrays3 = new int[]{1,2,3,4,5};
Arrays.fill(arrays3, 1,3,8);
System.out.println(Arrays.toString(arrays3)); // [1, 8, 8, 4, 5]

4.2 二维数组--不支持

5.复制

5.1 一维数组

5.1.1 copyOf

// 拷贝--copyOf
Integer[] array1 = new Integer[]{1,2,3,4,5};
Integer[] array2 = Arrays.copyOf(array1, 3);
System.out.println(Arrays.toString(array2)); // [1, 2, 3]

5.1.2 copyOfRange

// 拷贝--copyOfRange 左闭右开
Integer[] array3 = Arrays.copyOfRange(array1, 3,5);
System.out.println(Arrays.toString(array3)); // [4, 5]

5.2 二维数组--不支持

6.查找

6.1 一维数组

public static int binarySearch(int[] a, int key)
public static int binarySearch(int[] a, int fromIndex, int toIndex,int key)
public static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)
public static <T> int binarySearch(T[] a, int fromIndex, int toIndex,T key, Comparator<? super T> c)

6.1.1 二分查找

规则:
image.png

// 数组无序
Integer[] array = new Integer[]{1,2,3,8,5,4,4};
Integer index1 = Arrays.binarySearch(array, 5); // -4
System.out.println(index1);

// 数组有序
Arrays.sort(array);
Integer index2 = Arrays.binarySearch(array, 5);
System.out.println(index2); // 5

// 多个相同元素
Integer index3 = Arrays.binarySearch(array, 4);
System.out.println(index3); // 3

// 不包含该元素
Integer index4 = Arrays.binarySearch(array, 7);
System.out.println(index4); // -7

6.1.2 比较器查找

ComparableTest[] comparableTests = new ComparableTest[]{
		new ComparableTest("林青霞", 27),
		new ComparableTest("风清扬", 30),
		new ComparableTest("刘晓曲", 28)
};

int index=Arrays.binarySearch(comparableTests, new ComparableTest("林青霞", 27));
System.out.println(index); // 0


public class ComparableTest implements Comparable<ComparableTest> {
	private String name;

	private int age;

	public ComparableTest(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public int compareTo(ComparableTest s) {
		int num = this.age - s.age;
		int num1 = (num == 0 ? this.name.compareTo(s.name) : num);
		return num1;
	}
}

6.2 二维数组--不支持

7.排序

7.1 一维数组

7.1.1 默认排序(升序)

// 全部排序
Integer[] array = new Integer[]{1,2,3,8,5,4,4};
Arrays.sort(array); // 默认升序排列
System.out.println(Arrays.toString(array)); // [1, 2, 3, 4, 4, 5, 8]

// 部分排序--左闭右开
Integer[] array2 = new Integer[]{1,2,3,8,5,4,4};
Arrays.sort(array2, 0,5); // 默认升序排列
System.out.println(Arrays.toString(array2)); // [1, 2, 3, 5, 8, 4, 4]

7.1.2 比较器排序

全部排序和部分排序

// 全部排序
ComparableTest[] comparableTests = new ComparableTest[]{
	new ComparableTest("林青霞", 31),
	new ComparableTest("刘晓曲", 30),
	new ComparableTest("风清扬", 28)
};

Arrays.sort(comparableTests);
for (int index = 0; index < comparableTests.length; index++) {
	System.out.println(comparableTests[index].getName());
}

// 全部排序
Integer[] array = new Integer[]{1,2,3,8,5,4,4};
Arrays.sort(array, new ComparatorTest());
System.out.println(Arrays.toString(array));

// 部分排序
ComparableTest[] comparableTests2 = new ComparableTest[]{
		new ComparableTest("林青霞", 31),
		new ComparableTest("刘晓曲", 30),
		new ComparableTest("风清扬", 28)
};

Arrays.sort(comparableTests2, 0, 2);
for (int index = 0; index < comparableTests2.length; index++) {
	System.out.println(comparableTests2[index].getName());
}

// 全部排序
Integer[] array2 = new Integer[]{1,2,3,8,5,4,4};
Arrays.sort(array2, 0,4, new ComparatorTest());
System.out.println(Arrays.toString(array2)); // [8, 3, 2, 1, 5, 4, 4]

7.2 二维数组--不支持

8.计算

8.1 一维数组

8.1.1 单个元素--setAll/parallelSetAll

int[] array = {1, 2, 3, 4, 5};
Arrays.setAll(array,x->x*x);
System.out.println(Arrays.toString(array)); // [0, 1, 4, 9, 16]

int[] array2 = {1, 2, 3, 4, 5};
Arrays.parallelSetAll(array2,x->x*x);
System.out.println(Arrays.toString(array2)); // [0, 1, 4, 9, 16]

8.1.2 两个元素--parallelPrefix

String[] s1 = {"java", "c++", "html", "css", "Javascript", "world"};
System.out.println(Arrays.toString(s1));   //[java, c++, html, css, Javascript, world]

Arrays.parallelPrefix(s1, String::concat);
System.out.println(Arrays.toString(s1));   //[java, javac++, javac++html, javac++htmlcss, javac++htmlcssJavascript, javac++htmlcssJavascriptworld]

int[] a = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(a));  //[1, 2, 3, 4, 5]

Arrays.parallelPrefix(a, (x, y) -> x * y);
System.out.println(Arrays.toString(a));  //[1, 2, 6, 24, 120]

Arrays.parallelPrefix(a, 2, 4, (x, y) -> x / y);
System.out.println(Arrays.toString(a));  //[1, 2, 6, 0, 120]  也可指定范围

8.2 二维数组--不支持

9.stream

标签:Java,Arrays,System,int,数组,println,new,out
From: https://www.cnblogs.com/wanglei5205/p/16886569.html

相关文章

  • idea将java项目打成jar包并使用
    1.首先编写一个工具类2.进行打包操作)3.Build之后在项目的out包下面就出现了一个jar包在新建一个项目新建lib文件夹将jar包放进去4.最后即可调用......
  • 动态数组
    //不需要数组,指针可以当成数组用#include<stdio.h>#include<stdlib.h>intmain(){ //变量定义 intmax; int*p; inti=0; intnumber; //提示输入最大值......
  • Java自学,要有技巧的学
    学习Java是有一定技巧和方法的,钻牛角尖的去学习它,只能让你感觉到费神费力,最终陷入到无穷无尽的细枝末节之中。然后渐渐的消磨掉你的耐心,直到你放弃。  学习的过程都是......
  • JavaScriptの类型
    前言此篇小结来源与《你不知道的JavaScript》和《JavaScript高级程序设计》的结合??或许是的,龟速总结中...七种内置类型nullundefinedbooleannumberstringobjectsy......
  • day2 java基础语法
    day1复习1.java的特点  2.jdk,jre,jvm的关系  3.为什么要配置path 基本语法1.关键字与保留字    2.标识符与标识符规则  3.java的命名规范 ......
  • java.方法.learn
    1.方法:什么是方法,方法的格式,方法的好处  2.方法的格式:把一些代码打包在一起,用到的时候就调用 一:最简单方法定义和调用:  二:带参数的方法调用:    形......
  • 大学生HTML期末作业, JavaScript期末大作业
    ......
  • 【Javaweb】四(关于接口类的作用)
    这里我们还是以房产信息管理系统的题目举例:   发现在DAO层和service层都有接口类(注:impl是实现类)为什么要用接口,不直接写实现类:1、简单、规范性:这些接口不仅告诉开......
  • Day3-4 包机制,JavaDoc
    包机制为了更好地组织类,java提供包机制,用于区别类名的命名空间鲍鱼举的语法格式为 packagepkg1[.pkg2[.pkg3...]] 一般利用公司域名倒置作为包名......
  • 【Java】Java中StringBuilder()成员方法append()和toString()
    StringBuilder就相当于C++的String长度可变,用于构造字符串对象,内部使用自动扩容的数组操作字符串数据。StringBuilder和StringBuffer使用的是相同的API【区别单独开一篇来......