day05

您所在的位置:网站首页 美国航空1493号班机空难 day05

day05

#day05| 来源: 网络整理| 查看: 265

# day05-算法和数据结构# 一、Arrays类

接下来我们学习的类叫做Arrays,其实Arrays并不是重点,但是我们通过Arrays这个类的学习有助于我们理解下一个知识点Lambda的学习。所以我们这里先学习Arrays,再通过Arrays来学习Lamdba这样学习会更丝滑一些_.

# 1.1 Arrays基本使用

我们先认识一下Arrays是干什么用的,Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。

下面我们用代码来演示一下:遍历、拷贝、排序等操作。需要用到的方法如下

1667458681721/** * 目标:掌握Arrays类的常用方法。 */ public class ArraysTest1 { public static void main(String[] args) { // 1、public static String toString(类型[] arr): 返回数组的内容 int[] arr = {10, 20, 30, 40, 50, 60}; System.out.println(Arrays.toString(arr)); // 2、public static 类型[] copyOfRange(类型[] arr, 起始索引, 结束索引) :拷贝数组(指定范围,包前不包后) int[] arr2 = Arrays.copyOfRange(arr, 1, 4); System.out.println(Arrays.toString(arr2)); // 3、public static copyOf(类型[] arr, int newLength):拷贝数组,可以指定新数组的长度。 int[] arr3 = Arrays.copyOf(arr, 10); System.out.println(Arrays.toString(arr3)); // 4、public static setAll(double[] array, IntToDoubleFunction generator):把数组中的原数据改为新数据又存进去。 double[] prices = {99.8, 128, 100}; // 0 1 2 // 把所有的价格都打八折,然后又存进去。 Arrays.setAll(prices, new IntToDoubleFunction() { @Override public double applyAsDouble(int value) { // value = 0 1 2 return prices[value] * 0.8; } }); System.out.println(Arrays.toString(prices)); // 5、public static void sort(类型[] arr):对数组进行排序(默认是升序排序) Arrays.sort(prices); System.out.println(Arrays.toString(prices)); } } # 1.2 Arrays操作对象数组

刚才我们使用Arrays操作数组时,数组中存储存储的元素是int类型、double类型,是可以直接排序的,而且默认是升序排列。

如果数组中存储的元素类型是自定义的对象,如何排序呢?接下来,我们就学习一下Arrays如何对对象数组进行排序。

首先我们要准备一个Student类,代码如下:

public class Student implements Comparable{ private String name; private double height; private int age; public Student(String name, double height, int age) { this.name = name; this.height = height; this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", height=" + height + ", age=" + age + '}'; } }

然后再写一个测试类,往数组中存储4个学生对象,代码如下。此时,运行代码你会发现是会报错的。

public class ArraysTest2 { public static void main(String[] args) { // 目标:掌握如何对数组中的对象进行排序。 Student[] students = new Student[4]; students[0] = new Student("蜘蛛精", 169.5, 23); students[1] = new Student("紫霞", 163.8, 26); students[2] = new Student("紫霞", 163.8, 26); students[3] = new Student("至尊宝", 167.5, 24); // 1、public static void sort(类型[] arr):对数组进行排序。 Arrays.sort(students); System.out.println(Arrays.toString(students)); } } 1667459056681

上面的代码为什么会报错呢?因为Arrays根本就不知道按照什么规则进行排序。为了让Arrays知道按照什么规则排序,我们有如下的两种办法。

**排序方式1:**让Student类实现Comparable接口,同时重写compareTo方法。Arrays的sort方法底层会根据compareTo方法的返回值是正数、负数、还是0来确定谁大、谁小、谁相等。代码如下:public class Student implements Comparable{ private String name; private double height; private int age; //...get、set、空参数构造方法、有参数构造方法...自己补全 // 指定比较规则 // this o @Override public int compareTo(Student o) { // 约定1:认为左边对象 大于 右边对象 请您返回正整数 // 约定2:认为左边对象 小于 右边对象 请您返回负整数 // 约定3:认为左边对象 等于 右边对象 请您一定返回0 /* if(this.age > o.age){ return 1; }else if(this.age < o.age){ return -1; } return 0;*/ //上面的if语句,也可以简化为下面的一行代码 return this.age - o.age; // 按照年龄升序排列 // return o.age - this.age; // 按照年龄降序排列 } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", height=" + height + ", age=" + age + '}'; } } **排序方式2:**在调用Arrays.sort(数组,Comparator比较器);时,除了传递数组之外,传递一个Comparator比较器对象。Arrays的sort方法底层会根据Comparator比较器对象的compare方法方法的返回值是正数、负数、还是0来确定谁大、谁小、谁相等。代码如下public class ArraysTest2 { public static void main(String[] args) { // 目标:掌握如何对数组中的对象进行排序。 Student[] students = new Student[4]; students[0] = new Student("蜘蛛精", 169.5, 23); students[1] = new Student("紫霞", 163.8, 26); students[2] = new Student("紫霞", 163.8, 26); students[3] = new Student("至尊宝", 167.5, 24); // 2、public static void sort(T[] arr, Comparator


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3