-
Arrays.toString() (打印数组)
Arrays.toString() 方法可以用来“打印”数组里的全部元素 ,(它返回一个字符串 ,这个字符串里有数组里的全部元素 ) ;
用法 : System.out.println( Arrays.toString( 要打印的数组 ) );
因为toString 方法返回的是一个字符串 , 所有可以用 sout 输出出来 ;
int [] array1 = {1,2,3,4,5} ;
System.out.println(Arrays.toString(array1));
上面代码的输出结果就是 : [1, 2, 3, 4, 5]
如果数组里的元素是 自定义类型 的 ,需要在这个自定义类里重写 toString()方法 ;
class Student{ //自定义的类
int age ;
String name ;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() { //重写的toString 方法
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
通过编译器 来快速重写 toString 方法
(在要重写toString方法的类里右击 或 按快捷键 Alt + Insert)
(选择toString() )
(编译器默认给我们把类的成员选好了,直接点ok就好了)
(这样就在这个类里重写了 toString 方法)
Student[] students = {new Student(18,"张三"),
new Student(12,"李四"),
new Student(11,"王五")};
System.out.println(Arrays.toString(students));
代码的输出结果为 :
[Student{age=18, name='张三'}, Student{age=12, name='李四'}, Student{age=11, name='王五'}]
我们也可以修改重写的 toString 方法, 让它返回我们想要的格式 ;
@Override
public String toString() {
return "{" +
"年龄:" + age +
", 名字:" + name + '\'' +
'}';
}
这时候我们在运行一次代码的结果为:
[{年龄:18, 名字:张三'}, {年龄:12, 名字:李四'}, {年龄:11, 名字:王五'}]
-
Arrays.copyOf() (拷贝数组)
copyOf 方法把数组的元素拷贝到新的数组里,然后返回这个新数组 ;
(拷贝从 第一个元素开始 , 返回的数组大小是拷贝长度)
用法 : Arrays.copyOf( 被拷贝的数组 , 拷贝的长度 ) ;
int[] array1 = {1, 2, 3, 4} ;
int[] array2 ;
array2 = Arrays.copyOf(array1 , 3) ;
System.out.println(Arrays.toString(array2));
上面代码输出的结果为 : [1, 2, 3]
拷贝的原理 :
一开始 array1 里有元素 1 ,2, 3, 4 ,而array2里还没有初始化;
array2 = Arrays.copyOf(array1, 3);
当我们执行这一条代码,copyOf() 这个方法主要有三个步骤;
1.首先先创建一个数组
(这里创建了一个长度为3的新数组)
2.把要拷贝的数组里的元素赋值到新的数组里
(这时候的新数组里有{1,2,3})
3.把新的数组 赋给 array2
这时候数组的拷贝就完成了
(此时的arra1和arr2里都有元素了)
拷贝的同时扩容
这时候我们可以发现,Arrays.copyOf() ,这个方法不止可以拷贝数组,还可以给数组扩容;
为什么可以给数组扩容?咱们要重新看看这个Arrays.copyOf()方法 ;
1.这里的这个3,是我们给的参数3 ,那么Arrays.copyOf()方法会按照我们给的 这个3 ,新建一个长度为3的新数组,然后在把array1里的元素拷贝到这个新数组里;
2. 那么 我们给比3更大的值给它,这个新建的数组不就更大了吗;
例如:
因为我们给的新数组大小是5,所以创建了一个长度为5的数组,而array1里只有4个元素,所以空出来一个位置
代码
int[] array1 = {1, 2, 3, 4};
int[] array2 ;
array2 = Arrays.copyOf(array1 , 5);
3. 如果 我们 把 array2 = Arrays.copyOf(array1 , 5) ; 改成 array1 = Arrays.copyOf(array1 , 5 ) ;
让array1 来接收 我们拷贝出来的新数组, 就可以达到 给 array1扩容的效果
例如;
当然,拷贝方法里我们也可以不用直接的 给一个 8 的大小, 使用 数组的length属性来更好;
(array1.length * 2 相当于是让array1 扩容两倍)
-
Arrays.sort() (给数组里的元素排序)
sort( 要排序的数组 ) 方法可以将数组里的元素排序好;
举个例子:
我们先定义一个数组
这个数组 array 里有7个元素,然后我们调用Arrays.sort();方法将array数组排序好;
(Arrays.sort() 这个括号里放的是我们要排序的数组)
这时候我们在调用我们上面提到的打印数组方法,把数组打印出来
这时候可以看到数组里的元素都按从小到大,升序排序好了;
代码
int[] array = { 13 , 1 , 34 , 8 , 9 , 10 , 3};
Arrays.sort(array);
System.out.println(Arrays.toString(array));