Arrays

Arrays:用来操作数组的一个工具类

Arrays类提供的常见方法:

|----------------------------------------------------------------------|------------------|
| 方法名 | 说明 |
| public static String toString(类型[ ] arr) | 返回数组的内容 |
| public static int[] copyOfRange(类型[ ] arr,起始索引,结束索引) | 拷贝数组(指定范围) |
| public static copyOf(类型[ ]arr,int newLethon) | 拷贝数组 |
| public static setAll(double [ ]arr,intToDoubleFuncation generator) | 把数组中的原数据改为新数据 |
| public static void sort (类型[ ]arr) | 对数组进行排序(默认是升序排序) |

import java.util.Arrays;
import java.util.function.IntToDoubleFunction;

public class Test1 {
    public static void main(String[] args) {
        int []arr1={11,22,33};
        //public static String toString(类型[ ] arr):	返回数组的内容
        System.out.println(Arrays.toString(arr1));
        //public static int[] copyOfRange(类型[ ] arr,起始索引,结束索引):	拷贝数组(指定范围)包前不包后
        int [] arr3=Arrays.copyOfRange(arr1,0,1);
        System.out.println(Arrays.toString(arr3));
        //public static copyOf(类型[ ]arr,int newLethon):	拷贝数组
        int [] arr4=Arrays.copyOf(arr1,3);
        System.out.println(Arrays.toString(arr4));
        //public static setAll(double [ ]arr,intToDoubleFuncation generator):把数组中的原数据改为新数据
        double[]arr2={99.8,66.8,33.9};
        Arrays.setAll(arr2, new IntToDoubleFunction() {
                    @Override
                    public double applyAsDouble(int value) {
                        return arr2[value]*0.68;
                    }
                }
        );
        System.out.println(Arrays.toString(arr2));
        //public static void sort (类型[ ]arr):	对数组进行排序(默认是升序排序)
        Arrays.sort(arr1);
        System.out.println(Arrays.toString(arr1));
    }
}

如果数组中存储的是对象,该怎么排序?

|-----|-----------------------------------------------------------------------------------------------------------------------------------|
| 方式一 | 让该对象的类实现Comparable(比较规则)接口,然后重写CompareTo方法,自己来制定比较规则 |
| 方式二 | 使用下面这个sort方法,创建Comparator比较器接口的匿名内部类对象,然后自己制定规则 public static <T>void sort (T[ ]arr,Comparator<?super T >c)对数组进行排序(支持自定义规则) |

public class Student implements Comparable<Student>{
    private String name;
    private double height;
    private int age;

    public Student() {
    }

    public Student(String name, double height, int age) {
        this.name = name;
        this.height = height;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
//这个方法是用来给sort方法内部进行比较的
    //制定比较规则
    //this(比较者) o(被比较者)谁调这个方法谁就是比较者
    @Override
    public int compareTo(Student o) {
        //约定1:如果左边对象  大于  右边对象  返回正整数
        //约定2:如果左边对象  小于  右边对象  返回负整数
        //约定2:如果左边对象  等于  右边对象  返回0
        //按照年龄排序
        //更简便的一种方法
        //return this.age-o.age;//升序
        //return o.age-this.age;//降序
        if (this.age>o.age) {
            return 1;
        }else if (this.age<o.age){
            return -1;
        }
        return 0;
    }


    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", height=" + height +
                ", age=" + age +
                '}';
    }
}

import java.util.Arrays;
import java.util.Comparator;

public class Test2 {
    public static void main(String[] args) {
        //目标:掌握如何对数组中的对象进行排序
       Student []Students=new Student[4];
       Students[0]=new Student("楚北捷",1.88,28);
       Students[1]=new Student("周翊然",1.83,24);
       Students[2]=new Student("于和伟",1.86,48);
       Students[3]=new Student("肖战",1.87,31);
       //public static void sort (类型【】arr):对数组进行排序
        Arrays.sort(Students);
        System.out.println(Arrays.toString(Students));
        //方式二	使用下面这个sort方法,创建Comparator比较器接口的匿名内部类对象,然后自己制定规则public static <T>void sort (T[ ]arr,Comparator<?super T >c)对数组进行排序(支持自定义规则)
        Arrays.sort(Students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                /*
                制定比较规则:     左边对象o1;右边对象o2
                //约定1:如果左边对象  大于  右边对象  返回正整数
                //约定2:如果左边对象  小于  右边对象  返回负整数
                //约定2:如果左边对象  等于  右边对象  返回0
                if (o1.getHeight()> o2.getHeight()) {
                    return 1;
                }else if (o1.getHeight()< o2.getHeight()){
                        return -1;
                }
                return 0;//升序

                 */
                return Double.compare(o1.getHeight(), o2.getHeight());
            }
        });
    }
}
相关推荐
xiaoshiguang32 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡2 小时前
【C语言】判断回文
c语言·学习·算法
别NULL2 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇2 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
yuanbenshidiaos4 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习4 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA4 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
chengooooooo4 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc4 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
游是水里的游5 小时前
【算法day20】回溯:子集与全排列问题
算法