目录
包装类
作用介绍
包装类的特有功能
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
}
给定特定值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+",");
快速输出数组内容,但是输出带有 [ ]
int[] a = {1,2,3,4,5};
System.out.println(Arrays.toString(a));
// 输出格式:[1,2,3,4,5]
数组排序函数,默认升序
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]
比较两数组内容是否相等
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()方法
两种方式:
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]
在数组中查找指定值,若找到,则返回此值的下标,
若没找到,返回 -插入点-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常用方法(超详解)