day05 |
您所在的位置:网站首页 › 美国航空1493号班机空难 › day05 |
# 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 |