• JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)


    一:工具类

    –不存储数据,而是在数据容器上,实现高效操作
    • 排序
    • 搜索
    –Arrays类
    –Collection类

    二:Arrays类(处理数组)

    (一)基本方法

    –排序:对数组排序, sort/parallelSort。
    –查找:从数组中查找一个元素, binarySearch。
    –批量拷贝:从源数组批量复制元素到目标数组, copyOf
    –批量赋值:对数组进行批量赋值, fill。
    –等价性比较:判定两个数组内容是否相同, equals。

    (二)实现

    import java.util.Arrays;
    import java.util.Random;
    
    public class ArraysTest {
        public static void main(String[] args) {
            //testSort();
            //SearchSort();
            //testCopy();
            //testFill();
            testEquality();
        }
        
        public static void testSort() {
            Random rm=new Random();
            int[] a=new int[10];
            
            System.out.println("=======测试排序======");
            
            for(int i=0;i<a.length;i++) {
                a[i] = rm.nextInt();
            }
            
            System.out.println("===排序前===");
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
            
            System.out.println("===排序后===");
            Arrays.sort(a);
            
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
        }
        
        public static void SearchSort() {
            Random rm=new Random();
            int[] a=new int[10];
            
            System.out.println("=======测试查找======");
            
            for(int i=0;i<a.length;i++) {
                a[i] = rm.nextInt();
            }
            
            a[8] = 1000;
            Arrays.sort(a);
            
    
            System.out.println("===查找前===");
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
            //二分查找需要先进性排序
            System.out.println("1000位置:"+Arrays.binarySearch(a, 1000));
        }
        
        public static void testCopy() {
            Random rm=new Random();
            int[] a=new int[10];
            
            System.out.println("=======测试拷贝======");
            
            for(int i=0;i<a.length;i++) {
                a[i] = rm.nextInt();
            }
            
            int[] b=Arrays.copyOf(a, 6);    //拷贝前6个元素到b中
            
            System.out.println("===拷贝前a===");
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
            
            System.out.println("===拷贝后b===");
            for(int i=0;i<b.length;i++)    {
                System.out.print(b[i] + ",");
            }
            System.out.println();
        }
        
        public static void testFill() {
            int[] a = new int[10];
            Arrays.fill(a, 100);
            Arrays.fill(a, 2, 8, 200);
            System.out.println("===========测试批量赋值============");
            System.out.print("数组赋值后:");
            for(int i=0;i<a.length;i++)
            {
                System.out.print(a[i] + ",");
            }
            System.out.println();
        }
        
        public static void testEquality() {
            int[] a = new int[10];
            Arrays.fill(a, 100);
            int[] b = new int[10];
            Arrays.fill(b, 100);        
            System.out.println(Arrays.equals(a, b));    //数据一样时为true
            b[9] = 200;
            System.out.println(Arrays.equals(a, b));    //不一致为false
        }
    }
    View Code
        public static void testSort() {
            Random rm=new Random();
            int[] a=new int[10];
            
            System.out.println("=======测试排序======");
            
            for(int i=0;i<a.length;i++) {
                a[i] = rm.nextInt();
            }
            
            System.out.println("===排序前===");
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
            
            System.out.println("===排序后===");
            Arrays.sort(a);
            
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
        }
        public static void SearchSort() {
            Random rm=new Random();
            int[] a=new int[10];
            
            System.out.println("=======测试查找======");
            
            for(int i=0;i<a.length;i++) {
                a[i] = rm.nextInt();
            }
            
            a[8] = 1000;
            Arrays.sort(a);
            
    
            System.out.println("===查找前===");
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
            //二分查找需要先进行排序
            System.out.println("1000位置:"+Arrays.binarySearch(a, 1000));
        }
        
        public static void testCopy() {
            Random rm=new Random();
            int[] a=new int[10];
            
            System.out.println("=======测试拷贝======");
            
            for(int i=0;i<a.length;i++) {
                a[i] = rm.nextInt();
            }
            
            int[] b=Arrays.copyOf(a, 6);    //拷贝前6个元素到b中
            
            System.out.println("===拷贝前a===");
            for(int i=0;i<a.length;i++)    {
                System.out.print(a[i] + ",");
            }
            System.out.println();
            
            System.out.println("===拷贝后b===");
            for(int i=0;i<b.length;i++)    {
                System.out.print(b[i] + ",");
            }
            System.out.println();
        }
        
        public static void testFill() {
            int[] a = new int[10];
            Arrays.fill(a, 100);
            Arrays.fill(a, 2, 8, 200);
            System.out.println("===========测试批量赋值============");
            System.out.print("数组赋值后:");
            for(int i=0;i<a.length;i++)
            {
                System.out.print(a[i] + ",");
            }
            System.out.println();
        }
        
        public static void testEquality() {
            int[] a = new int[10];
            Arrays.fill(a, 100);
            int[] b = new int[10];
            Arrays.fill(b, 100);        
            System.out.println(Arrays.equals(a, b));    //数据一样时为true
            b[9] = 200;
            System.out.println(Arrays.equals(a, b));    //不一致为false
        }

    三:包装器类Collection

    (一)基本方法

    处理对象是 Collection及其子类
    
    –排序:对List进行排序,sort。
    –搜索:从List中搜索元素,binarySearch
    –批量赋值:对List批量赋值,fill。
    –最大、最小:查找集合中最大/小值,max,min
    –反序:将List 反序排列,reverse

    (二)实现

    import java.util.ArrayList;
    import java.util.Collections;
    
    public class CollectionsTest {
    
        public static void main(String[] args) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            list.add(1);
            list.add(12);
            list.add(2);
            list.add(19);
             
            // 排序
            Collections.sort(list);
            // 检索
            System.out.println("元素所在的索引值是:" + Collections.binarySearch(list, 12));
            //最大最小
            System.out.println("最大值:" + Collections.max(list));
            System.out.println("最小值:" + Collections.min(list));
            Collections.reverse(list); //翻转不需要用到排序
             
            Collections.fill(list, 100); //全部赋值为100
        }
    }

    四:对象比较

    (一)对象实现Comparable接口(需要修改对象类)

    JAVA核心技术I---JAVA基础知识(集合set)

    –compareTo方法
        > 返回1,==返回0,<返回-1Arrays和Collections在进行对象sort时,自动调用该方法
    import java.util.Arrays;
    
    class Dog implements Comparable<Dog>{
        int age;
        String name;
        
        public Dog(String n,int a) {
            name=n;
            age=a;
        }
        
        public int getAge() {
            return age;
        }
        
        public String getName() {
            return name;
        }
        
        public int compareTo(Dog another) {
            int flag;
            flag=name.compareTo(another.getName());
            
            if(flag==0) {
                return age-another.getAge();
            }
            
            return flag;
        }
    }
    
    
    public class CompareToTest {
        public static void main(String[] args) {
            Dog[] da=new Dog[3];
            da[0]=new Dog("Tom",13);
            da[1]=new Dog("Som",27);
            da[2]=new Dog("Som",16);
            
            Arrays.sort(da);
            
            for(Dog d : da) {
                System.out.println(d.getName()+":"+d.getAge());
            }
        }
    }
    Som:16
    Som:27
    Tom:13
        public static void main(String[] args) {
            LinkedList<Dog> dl = new LinkedList<Dog>();
            
            dl.add(new Dog("Tom",13));
            dl.add(new Dog("Som",27));
            dl.add(new Dog("Som",16));
            
            Collections.sort(dl);
            
            for(Dog d : dl) {
                System.out.println(d.getName()+":"+d.getAge());
            }
        }

    (二)新建Comparator(适用于对象类不可更改的情况)

    例如:获取的是class,无法修改源码
    –compare方法
        > 返回1,==返回0,<返回-1Comparator比较器将作为参数提交给工具类的sort方法
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.LinkedList;
    
    class Dog{  //不可修改,不能添加compareTo,不能继承接口
        int age;
        String name;
        
        public Dog(String n,int a) {
            name=n;
            age=a;
        }
        
        public int getAge() {
            return age;
        }
        
        public String getName() {
            return name;
        }
    }
    
    class MyComparator implements Comparator<Dog>{  //需要我们自己实现一个比较器
        public int compare(Dog one,Dog another) {
            int flag;
            flag = one.getName().compareTo(another.getName());
            if(flag==0) {
                return one.getAge()-another.getAge();
            }
            return flag;
        }
    }
    
    
    public class CompareToTest {
        public static void main(String[] args) {
            LinkedList<Dog> dl = new LinkedList<Dog>();
            
            dl.add(new Dog("Tom",13));
            dl.add(new Dog("Som",27));
            dl.add(new Dog("Som",16));
            
            Collections.sort(dl,new MyComparator());
            
            for(Dog d : dl) {
                System.out.println(d.getName()+":"+d.getAge());
            }
        }
    }
    Som:16
    Som:27
    Tom:13

    五:练习

    import java.util.Arrays;
    
    import java.util.Scanner;
    
    class Currency {
        private String name;        //货币名称
        private int originalValue;  //原始值
        private int value;          //转换为人民币后的值
    
        public static String[] CURRENCY_NAME = { "CNY", "HKD", "USD", "EUR" };
    
        public static int[] CURRENCY_RATIO = { 100, 118, 15, 13 };
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getOriginalValue() {
            return originalValue;
        }
    
        public void setOriginalValue(int originalValue) {
            this.originalValue = originalValue;
        }
    
        public int getValue() {
            return value;
        }
    
        public void setValue(int value) {
            this.value = value;
        }
    
    }
    
    
    class HKD extends Currency implements Comparable{
        // 实现你的构造函数与Comparable中的接口
    }
    
    
    
    class USD extends Currency implements Comparable{
        // 实现你的构造函数与Comparable中的接口
    }
    
    
    class EUR extends Currency implements Comparable{
        // 实现你的构造函数与Comparable中的接口
    }
    
    public class Main {
    
        public static void main(String[] args) {
            Currency[] cs = new Currency[3];
            //初始化
    
            Scanner sc = new Scanner(System.in);
            //利用hasNextXXX()判断是否还有下一输入项
    
            int a = 0;
            int b = 0;
            int c = 0;
    
            if (sc.hasNext()) {
                a = sc.nextInt();
                cs[0] = new HKD(a);
            }
    
            if (sc.hasNext()) {
                b = sc.nextInt();
                cs[1] = new USD(b);
            }
    
            if (sc.hasNext()) {
                c = sc.nextInt();
                cs[2] = new EUR(c);
            }
            //初始化结束
    
            //请补充排序
            
            //请补充输出结果        
    
        }
    
    }

    import java.util.Arrays;
    
    import java.util.Scanner;
    
    
    
    class Currency {
        private String name;        //货币名称
        private int originalValue;  //原始值
        private int value;          //转换为人民币后的值
    
        public static String[] CURRENCY_NAME = { "CNY", "HKD", "USD", "EUR" };
    
        public static int[] CURRENCY_RATIO = { 100, 118, 15, 13 };
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getOriginalValue() {
            return originalValue;
        }
    
        public void setOriginalValue(int originalValue) {
            this.originalValue = originalValue;
        }
    
        public int getValue() {
            return value;
        }
    
        public void setValue(int value) {
            this.value = value;
        }
    
    }
    
    
    class HKD extends Currency implements Comparable<Currency>{
        // 实现你的构造函数与Comparable中的接口
        public HKD(int v) {
            this.setName(Currency.CURRENCY_NAME[1]);
            this.setOriginalValue(v);
            this.setValue(v*Currency.CURRENCY_RATIO[0]/Currency.CURRENCY_RATIO[1]);    //转为人民币
        }
        
        public int compareTo(Currency cy) {
            return this.getValue()-cy.getValue();    //比较人民币
        }
    }
    
    
    
    class USD extends Currency implements Comparable<Currency> {
        // 实现你的构造函数与Comparable中的接口    
        public USD(int v) {
            this.setName(Currency.CURRENCY_NAME[2]);
            this.setOriginalValue(v);
            this.setValue(v*Currency.CURRENCY_RATIO[0]/Currency.CURRENCY_RATIO[2]);
        }
        
        public int compareTo(Currency cy) {
            return this.getValue()-cy.getValue();
        }
    }
    
    
    class EUR extends Currency implements Comparable<Currency> {
        // 实现你的构造函数与Comparable中的接口    
        public EUR(int v) {
            this.setName(Currency.CURRENCY_NAME[3]);
            this.setOriginalValue(v);
            this.setValue(v*Currency.CURRENCY_RATIO[0]/Currency.CURRENCY_RATIO[3]);
        }
        
        public int compareTo(Currency cy) {
            return this.getValue()-cy.getValue();
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
            Currency[] cs = new Currency[3];
            //初始化
    
            Scanner sc = new Scanner(System.in);
            //利用hasNextXXX()判断是否还有下一输入项
    
            int a = 0;
            int b = 0;
            int c = 0;
    
            if (sc.hasNext()) {
                a = sc.nextInt();
                cs[0] = new HKD(a);
            }
    
            if (sc.hasNext()) {
                b = sc.nextInt();
                cs[1] = new USD(b);
            }
    
            if (sc.hasNext()) {
                c = sc.nextInt();
                cs[2] = new EUR(c);
            }
            //初始化结束
            //请补充排序
            Arrays.sort(cs);
            
            //请补充输出结果        
            for(Currency citem : cs) {
                System.out.println(citem.getName()+""+citem.getOriginalValue());
            }
    
        }
    
    }
    答案
  • 相关阅读:
    react中使用map时onClick事件失效
    【Taro全实践】Taro在微信小程序中的生命周期
    git的基本操作
    【Taro全实践】修改radio组件的大小
    react中回车enter事件处理
    安装nodejs 后运行 npm 命令无响应
    React中跨域问题的完美解决方案
    在React中修改antd的样式
    Linux 开机过程(转)
    Microsoft Windows XP Professional X64 Edition Corporate Keys
  • 原文地址:https://www.cnblogs.com/ssyfj/p/10220635.html
Copyright © 2020-2023  润新知