Java 包装类和Arrays类(详细解释)

目录

包装类

作用介绍

包装类的特有功能

Arrays类

Arrays.fill() 

Arrays.toString() 

Arrays.sort()

升序排序

降序排序

Arrays.equals()

Arrays.copyOf()

Arrays.binarySearch()

包装类

作用介绍

包装类其实就是8种基本数据类型对应的引用类型。

基本数据类型 引用数据类型
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

为什么需要包装类?

Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。

后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型。

自动装箱

基本类型的数据和变量可以直接赋值给包装类型的变量。

public static void main(String[] args) {
    int num1 = 10;

    // 自动装箱(将int基本数据类变量赋值给包装类型变量)
    Integer a = num1;
    System.out.println(a);
}

自动拆箱

包装类型的变量可以直接赋值给基本数据类型的变量。

public static void main(String[] args) {
    Integer num2 = 100;

    // 自动拆箱(将包装类型变量赋值给基本类型变量)
    int b = num2;
    System.out.println(b);
}

包装类的特有功能

包装类的变量的默认值可以是null,容错率更高, 而基本类型不可以。

public static void main(String[] args) {
    Integer num3 = null;
}

可以把基本类型的数据转换成字符串类型(用处不大)

  • 调用toString()方法得到字符串结果。
  • 或者调用Integer.toString(基本类型的数据)。
public static void main(String[] args) {
    Integer number = 100;
    // 方式一
    String result1 = number.toString();
  	// 方式二
  	String result2 = Integer.toString(101);
    // 方式三: 最简单常用
    String result3 = number + "";
  
    System.out.println(result1 + 1); // 1001
    System.out.println(result2 + 1); // 1011
    System.out.println(result3 + 2); // 1002
}

可以把字符串类型的数值转换成真实的数据类型(非常有用)

  • teger.parseInt(“字符串类型的整数”)
  • Double.parseDouble(“字符串类型的小数”)。
 String st1 = "123";
 String st2 = "12.123";
 int a = Integer.parseInt(st1);
 double b = Double.parseDouble(st2);
 System.out.println(a+1);//124
 System.out.println(b+1);//13.123

将字符串类型的数字转为真实的数据, 我们也可以调用包装类的valueOf方法

public static void main(String[] args) {
    String strNum1 = "123";
    String strNum2 = "12.123";

    // 字符串转整数
    int intNum = Integer.valueOf(strNum1);
    // 字符串转小数
    double doubleNum = Double.valueOf(strNum2);

    System.out.println(intNum + 1); // 124
    System.out.println(doubleNum + 1); // 13.123
}

Arrays类

Arrays.fill() 

给定特定值val,使整个数组中或者某下标范围内的元素值为val。

 int [] a = new int[10];
 int [] b = new int[8];
 Arrays.fill(a,3);
 Arrays.fill(b,3,7,6);
 for(int x : a)
    System.out.print(x+",");
 System.out.println();
 for(int x : b)
    System.out.print(x+",");

  Java 包装类和Arrays类(详细解释)_第1张图片

Arrays.toString() 

快速输出数组内容,但是输出带有 [ ]

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

Arrays.sort()

升序排序

数组排序函数,默认升序

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

两种重载方式:

1.Arrays.sort (数组名)

2.Arrays.sort (数组名,起始坐标,排序长度)

对字符串排序时,和c+一样,是按照字典序排序

降序排序

要实现减序排序,可以对用 Collections.reverseOrder(),也可以包装类型数组

不包装

Arrays.sort(a, Collections.reverseOrder());

包装

 Integer[] a = {1,4,3,2,5,6,2,3,4};
 Arrays.sort(a,((o1, o2) -> o2 - o1));
 System.out.println(Arrays.toString(a));
 // [6, 5, 4, 4, 3, 3, 2, 2, 1]

Arrays.equals()

比较两数组内容是否相等

int[] a = {1,2,3};
int[] b = {1,2,3};
boolean isSame = Arrays.equals(a,b);
//true

注意:Arrays.equals()是比较数组内容,而a.equals(b) 这样的方法是比较地址值

特别注意:在Java中数组a==b比较的时两者的地址

以后使用java提供的引用数据内容(数组、字符串、各种集合....)时,一定要用equals()方法比较内容是否相等,而不是傻傻的用 ==了!因为官方已经把equals()给重写了。如果你要比较你自己写的类,例如学生按成绩排序,就要自己重写equals()方法

Arrays.copyOf()

两种方式:

1.B数组 = Arrays.copyOf(A数组,赋值长度)

 int [] a = new int[10];
 int [] b;
 Arrays.fill(a,10);
 b = Arrays.copyOf(a,11);//超过赋值长度赋值为0
 System.out.println(Arrays.toString(b));
 //[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0]

2. B数组 = Arrays.copyOfRange(A数组 ,起始坐标,截取长度)

int [] a = new int[10];
int [] b;
Arrays.fill(a,10);
b = Arrays.copyOfRange(a,2,5);
System.out.println(Arrays.toString(b));
//[10, 10, 10]

Arrays.binarySearch()

在数组中查找指定值,若找到,则返回此值的下标,

若没找到,返回 -插入点-1(一定为负值);

int[] a = {1,5,6,7};
Arrays.binarySearch(a,2)  //没找到,插入点为1,则返回 -2
Arrays.binarySearch(a,4)  //没找到,插入点为1,则返回 -2
Arrays,binarySearch(a,8)  //没找到,插入点为4,则返回 -5
Arrays.binarySearch(a,5)  //找到了!返回下标 1
只要返回值 ≥ 0 ,就代表找到了。

推荐音乐:手写的从前

参考:Java基础Arrays类   Arrays常用方法(超详解)

你可能感兴趣的:(java,算法,数据结构)