JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/对象的克隆/二叉树

/**
 * Math类、Random类、Arrays类:具体查JAVA手册。。。。。。
 */
public class Main {
    public static void main(String[] args) {
        String[] s1 = {"a","b","c","d","e"};
        String[] s2 = {"a","b","c","d","e"};
        boolean b = Arrays.equals(s1,s2); //比较两数组内容
        System.out.println(b); //输出true
        
        String[] s3 = new String[6];
        Arrays.fill(s3,"井空");
        System.out.println(s3.length);
        for(String i:s3) System.out.print(i+" "); System.out.println();
        
        String[] s4 = Arrays.copyOfRange(s1, 2, 3); //[2,3)
        for(String i:s4) System.out.print(i+" "); System.out.println();
        
        int index = Arrays.binarySearch(s1, "c");
        System.out.println(index);
    }
}
/**
 * 日期操作类
 * Date类:表示特定的瞬间,精确到毫秒,也是程序运行时的当前时间
 * Calendar类:可以精确到毫秒
 * DateFormat类
 * SimpleDateFormat类:日期格式化类
 */
public class Main {
    public static void main(String[] args) {
        Date d1 = new Date();
        Date c = new Date();
        System.out.println(d1.getTime()); //毫秒表示
        System.out.println(d1); //格式表示
        
        //两种实例化方式
        Calendar ca1 = Calendar.getInstance();
        Calendar ca2 = new GregorianCalendar(); //阳历
        int year = ca1.get(Calendar.YEAR);
        int month = ca1.get(Calendar.MONTH)+1;
        int day = ca1.get(Calendar.DAY_OF_MONTH);
        int hour = ca1.get(Calendar.HOUR);
        int minute = ca1.get(Calendar.MINUTE);
        int second = ca1.get(Calendar.SECOND);
        System.out.println(year+" "+month+" "+day);
        System.out.println(hour+" "+minute+" "+second);
        
        DateFormat df1 = DateFormat.getDateInstance();
        DateFormat df2 = DateFormat.getTimeInstance();
        String nowDate = df1.format(new Date());
        String nowTime = df2.format(new Date());
        System.out.println(nowDate);
        System.out.println(nowTime);
        
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy^MM^dd HH:mm:ss SSS毫秒");
        String swa = sdf1.format(new Date());
        System.out.println(swa);
    }
}
/**
 * 对象比较器:对两个或多个数据项进行比较,以确定它们是否相等,或确定它们之间的大小关系
 * Comparable接口:强行对实现它的每个类的对象进行整体排序,类的compareTo方法被称为它的自然比较方法
 * 如果自定义类的对象要实现排序,那么就要实现Comparable接口,并实现接口的CompareTo方法
 * 
 * Comparable接口要求自定义类去实现,按照OO原则:对修改关闭,对扩展开放。
 * 如果这个类已经定义好,不想再去修改它,如何实现? 答:Arrays.sort有一个重载方法:
 */
public class Main {
    public static void main(String[] args) {
        String[] names = {"a","b","c","d","e","f"};
        Person[] persons = {
            new Person("a",10), new Person("b",9),
            new Person("c",8),  new Person("d",7),
            new Person("e",6),  new Person("f",5),
        };
        //自定义类对对象数组排序
        Arrays.sort(persons);
        for(Person i:persons) System.out.println(i.name+" "+i.age);
        
        
        Person2[] persons2 = {
            new Person2("a",10), new Person2("b",9),
            new Person2("c",8),  new Person2("d",7),
            new Person2("e",6),  new Person2("f",5),
        };
        Arrays.sort(persons2,new Person2Comparator()); //使用自定义的比较器
        for(Person2 i:persons2) System.out.println(i.name+" "+i.age);
        System.out.println(Arrays.toString(persons2));//返回数组内容的字符串表示形式
    }
}

class Person implements Comparable<Person>{
    public String name;
    public int age;
    Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Person o) { //比较器的比较方法
        //实现:定义对象之间的比较规则
        if(o==null){
            throw new NullPointerException();
        }
        //如果当前对象小于参数对象,返回-1
        //如果当前对象等于参数对象,返回0
        //如果当前对象大于参数对象,返回1
        if(this.age < o.age) 
            return -1;
        else if(this.age < o.age)
            return 1;
        return 0;
    }
}

class Person2{
    public String name;
    public int age;
    Person2(String name,int age){
        this.name = name;
        this.age = age;
    }
}
class Person2Comparator implements Comparator<Person2>{
    @Override
    public int compare(Person2 o1, Person2 o2) {
       if(o1==null || o2==null)
           throw new NullPointerException();
       if(o1.age < o2.age)
           return -1;
       else if(o1.age > o2.age)
           return 1;
       return 0;
    }
}
/**
 * 对象的克隆:将一个对象复制一份(克隆要比new效率高)
 * 一个类要想实现克隆功能,必须:
 * 1.实现Cloneable接口,该接口必须是一个标记接口
 * 2.重写Obejct类中的Clone方法
 */
public class Main {
    public static void main(String[] args) {
        Cat c1 = new Cat("a",10);
        System.out.println("c1="+c1);
        try{
            Cat c2 = (Cat)c1.clone();
            System.out.println("c2="+c2);
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
    }
}

class Cat implements Cloneable{
    private String name;
    private int age;
    
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Cat{" + "name=" + name + ", age=" + age + '}';
    }
    @Override
    //重写Obejct的Clone方法
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
/**
 * 二叉树
 */
public class Main {
    public static void main(String[] args) {
        BinaryTree t1 = new BinaryTree();
        t1.add(8);
        t1.add(9);
        t1.add(3);
        t1.add(4);
        t1.print();
    }
}

class BinaryTree{
    private Node root;
    
    public void add(int data){
        if(root==null){
            root = new Node(data);
        }else{
            root.addNode(data);
        }
    }
    public void print(){
        if(root!=null){
            root.printNode();
        }else{
            System.out.println("NULL");
        }
    }
    
    class Node{
        private int data;
        private Node left;
        private Node right;
        public Node(int data){
            this.data = data;
        }
        public void addNode(int data){
            if(data <= this.data){
                if(this.left==null){
                    this.left = new Node(data);
                }else{
                    this.left.addNode(data);
                }
            }else{
                if(this.right==null){
                    this.right = new Node(data);
                }else{
                    this.right.addNode(data);
                }
            }
        }
        public void printNode(){
            System.out.println(this.data);
            if(this.left!=null)
                this.left.printNode();
            if(this.right!=null)
                this.right.printNode();
        }
    }
}
原文地址:https://www.cnblogs.com/fish7/p/4148984.html