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

Posted 敲不完的代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 + "]";
    }
    
}

 

以上是关于Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)的主要内容,如果未能解决你的问题,请参考以下文章

java源码之Comparable和Comparator

面试----java基础集合---------------------comparable和comparator 的区别

Java之集合初探Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口

Collection集合之六大接口(CollectionSetListMapIterator和Comparable)

Java基础之集合与泛型

数据结构Java版对象的比较之Comparable与Comparator比较器