13.Java中Comparable接口,Readable接口和Iterable接口

1.Comparable接口

说明:可比较(可排序的)

例子:按照MyClass的y属性进行生序排序

class MyClass implements Comparable<MyClass>{
    private int x;
    private int y;

    public MyClass(int x,int y){
        this.x=x;
        this.y=y;
    }

    @Override
    public int compareTo(MyClass o) {
        //按照y进行升序排序
        return y<o.y?-1:(y==o.y?0:1);
    }

    @Override
    public String toString(){
        return x+"@"+y;
    }
}

main函数
List<MyClass> list=new ArrayList<>(Arrays.asList(new MyClass(1,2),new MyClass(3,1),new MyClass(2,3)));
Collections.sort(list);
System.out.println(list);

结果:
[[email protected], [email protected], [email protected]]

2.Comparator接口

说明:迭代器,是sort函数的参数

例子:按照MyClass的x属性进行排序

class MyClass{
    public int x;
    public int y;

    public MyClass(int x,int y){
        this.x=x;
        this.y=y;
    }

    @Override
    public String toString(){
        return x+"@"+y;
    }
}

class MyComparator implements Comparator<MyClass>{
    @Override
    public int compare(MyClass o1,MyClass o2){
return o1.x<o2.x?-1:(o1.x==o2.x?(o1.y<o2.y?-1:(o1.y==o2.y?0:1)):1);
} } 

main函数 
List<MyClass> list=new ArrayList<>(Arrays.asList(new MyClass(1,2),new MyClass(3,1),new MyClass(3,3),new MyClass(3,2),new MyClass(2,3)));Collections.sort(list,new MyComparator());System.out.println(list);
结果: [[email protected], [email protected], [email protected], [email protected], [email protected]]

3.Iterable接口

说明:可迭代,实现Iterable<T>接口之后,可以用Foreach遍历

例子:有点多余,List直接就可以用foreach遍历

class MyClass implements Iterable<Integer>{
    public List<Integer> list=new ArrayList<>(Arrays.asList(new Integer(1),new Integer(2),new Integer(3)));

    @Override
    public Iterator<Integer> iterator() {
        return list.iterator();
    }

    @Override
    public String toString(){
        return super.toString();
    }
}

例子:结合Iterator接口

class MyClass implements Iterable<Integer>{
    int[] array=new int[]{1,2,3,4,5,6,7};
    int index=0;

    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            @Override
            public boolean hasNext() {
                return index<array.length;
            }

            @Override
            public Integer next() {
                return array[index++];
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }

    @Override
    public String toString(){
        return super.toString();
    }
}

4.Readable接口

说明:实现Readable接口后可以作为Scanner对象的输入流

例子:

public class TaskTimeoutDemo {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(new MyClass(2));
        while(scanner.hasNext()){
            System.out.println(scanner.nextLine());
        }
    }
}

class MyClass implements Readable{
    private int count;
    public MyClass(int count){
        this.count=count;
    }

    @Override
    public int read(CharBuffer cb) throws IOException {
        if(count--==0) return -1;
        cb.append("Aa");
        cb.append("Bb");
        cb.append("Cc");
        cb.append("Dd");
        cb.append("Ee");
        cb.append("Ff");
        cb.append("Gg");
        cb.append("Hh");
        cb.append("Ii\n");
        return 1;
    }
} 

这里需要注意一点什么时候会调用read函数?

1.scanner.hasNext()后发现缓冲区中没有数据,就回去读区输入流中的数据,输入流的数据存储在CharBuffer中,上边的例子中一次read会向缓冲区中添加一行字符串,整个程序会调用两次read函数。

时间: 2024-10-25 16:05:56

13.Java中Comparable接口,Readable接口和Iterable接口的相关文章

Java中Comparable和Comparator接口区别分析

Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧.Comparable 简介Comparable 是排序接口.若一个类实现了Comparab 本文要来详细分析一下Java中Comparable和Comparator接口的区别,

java中Comparable实现对象的比较

/* class A implements Comaprable<A>{ } 那么 A x = new A(); 类关系图 Object o = A; Object Comparable c = A; | Comparable A 实现了 Comparable 接口嘛 |-----|-----A 所以有 o instanceof A == true; o instanceof Comparable == true; 例如ArrayList添加对象实例时,对象实例添加之后先向上转型为Object

java中Comparable 和Comparator

java中Comparable 和Comparator -Comparable接口 接口定义 public interface Comparable<T> { public int compareTo(T o); } 该接口中仅仅包含了一个compareTO()函数, int compareTo(Object o): 比较当前实例对象与对象o,如果位于对象o之前,返回负值,如果两个对象在排序中位置相同,则返回0,如果位于对象o后面,则返回正值. 实例: x.compareTo(y) 来&quo

Java中Comparable和Comparator实现对象比较

1.通过Comparable实现排序 package Comparable; import java.util.Arrays; public class ComparableUser implements Comparable<ComparableUser> { private String id; private int age; public ComparableUser(String id, int age) { this.id = id; this.age = age; } publi

Java基础知识强化之多线程笔记05:Java中继承thread类 与 实现Runnable接口的区别

1. Java中线程的创建有两种方式:  (1)通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中. (2)通过实现Runnable接口,实例化Thread类. 2. 在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程.当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看一下这两种方式实现的两种结果. 继承thread类 1 package com.threadtest; 2 clas

Java中继承thread类与实现Runnable接口的区别

Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程.当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看一下这两种方式实现的两种结果. Java代码   package com.threadtest; class MyThread e

java中封装,继承,多态,接口学习总结

### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通过严格的接口控制.封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段.适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性.***封装的优点***    1  良好的封装能够减少耦合.    2 类内部的结构可以自由修改.     3 可以对成员变量进行更精

Java 中 Comparable 和 Comparator 比较

本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Array

【转载】Java中Comparable和Comparator比较

[本文转自]http://www.cnblogs.com/skywang12345/p/3324788.html Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort