• Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)


    一、Comparable接口, Collections类

    List的常用算法:

    • sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法
    • shuffle(List); 随机排列
    • void reverse(List); 逆序排列(Linked效率较高)
    • copy(); 复制集合, 前提是size()相同(长度, 和容量的区别)
    • fill(List, Object);使用某个对象填充整个List
    • binarySearch();//使用二分搜索法之前先排序

    例子:

    package collectiontext;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Text2 {
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add("aaaa");
            list.add("qqqq");
            list.add("cccc");
            list.add("xxxx");
            System.out.println(list);
            System.out.println("-------------------------");
            
            //顺序排列
            Collections.sort(list);//sort(List);排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 
                                        //实现比较两个类大小的方法
            System.out.println(list);
            //随机排列
            Collections.shuffle(list);//shuffle(List); 随机排列
            System.out.println(list);
            //反转排列(逆序排列)
            Collections.reverse(list);//void reverse(List); 逆序排列(Linked效率较高)
            System.out.println(list);
            System.out.println("-------------------------");
            
            List list2 = new ArrayList();
            list2.add("1");
            list2.add("2");
            list2.add("3");
            list2.add("4");
            Collections.copy(list2, list);//copy();复制集合, 前提是size()相同(注意长度, 和容量的区别)
            System.out.println(list2);
            System.out.println("-------------------------");
            
            Collections.fill(list2, new Person());//fill(List, Object);使用某个对象填充整个List
            System.out.println(list2);
            System.out.println("-------------------------");
            
            List list3 = new ArrayList();
            for (int i = 0; i < 10; i++) {
                list3.add(i);
            }
            int a = Collections.binarySearch(list3, 8);//binarySearch();一定要注意,使用二分搜索法之前先排序,
                                                        //这里刚好是排好序的,不好看出来,但是一定要注意
            System.out.println(a);
            System.out.println(list3);
        }
    }
    
    class Person{
    
        @Override
        public String toString() {
            return "Person []";
        }
        
    }

    二、泛型(Generic):里面写的一定是引用类型

      1, 装入集合的类型都被当作Object对待, 从而失去了自己的实际类型
      2, 集合中取出来的时候需要转型, 效率低, 易出错

      好处: 增强程序的可读性和稳定性

    例子:

    package collectiontext;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Text3 {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();//这个list里面只能装String类型的东西
            List<Person2> list2 = new ArrayList<Person2>();//这个list里面只能装Person2类型的东西
            List<Student> list3 = new ArrayList<Student>();
            
            list.add("qqq");
            list2.add(new Person2());
            list2.add(new Student());//Student继承了Person,即父类的引用指向子类的对象,多态的问题
            list3.add(new Student());
        }
    }
    
    class Person2{   //定义了一个Person2类,通俗一点,就是定义了一个Person2类型
        
    }
    
    class Student extends Person2{
        
    }

    三、Comparable接口:一个方法(comparaTo)

    int compareTo(T o)

      将此对象与指定的对象进行比较以进行排序。

    • 该对象小于指定对象,返回一个负整数(-1);
    • 该对象等于指定对象,返回一个零(0);
    • 该对象大于指定对象,返回一个正整数(1);

    例子:

    package collectiontext;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Text4 {
        public static void main(String[] args) {
            List<Animals> list = new ArrayList<Animals>();
            for (int i = 0; i < 5; i++) {
                list.add(new Animals("name" + i, i+5));
            }
            System.out.println(list);
            Collections.sort(list);
            System.out.println(list);
        }
    }
    
    
    class Animals implements Comparable<Animals> {
        private String name;
        private int age;
        public Animals(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        @Override
        public int compareTo(Animals o) {
            // TODO Auto-generated method stub
            if(this.age > o.age){
                return -1;
            } else if(this.age < o.age){
                return 1;
            } else{
                return this.name.compareTo(o.name);
            }
        }
        @Override
        public String toString() {
            return "Animals [name=" + name + ", age=" + age + "]";
        }
        
    }
  • 相关阅读:
    在 ML2 中 enable local network
    实践 Neutron 前的两个准备工作
    配置 linux-bridge mechanism driver
    为 Neutron 准备物理基础设施(II)
    两张图总结 Neutron 架构
    Service Plugin / Agent
    详解 ML2 Core Plugin(I)
    #define用法集锦[修正版]
    socketpair理解
    判断单链表是否存在环,判断两个链表是否相交-的相关讨论
  • 原文地址:https://www.cnblogs.com/sutao/p/7252904.html
Copyright © 2020-2023  润新知