Comparable
Comparable表示可被排序的,实现该接口的类的对象自动拥有排序功能。
对Integer的排序
package com.Factory;
import java.util.*;
public class Test21 {
public static void main(String[]args)
{
List <Integer> list =new ArrayList();
for (int i = 0; i <10 ; i++)
list.add(new Scanner(System.in).nextInt());
System.out.println("原来的顺序:"+list);
Collections.sort(list);//对list进行排序
System.out.println("排序后的顺序:"+list);
}
}
结果:
原来的顺序:[12, 2424, 435, 63, 643, 75, 986, 25, 73, 757]
排序后的顺序:[12, 25, 63, 73, 75, 435, 643, 757, 986, 2424]
源码:
public interface Comparable<T> {
public int compareTo(T o);
}
自定义对象同样需要继承Comparable接口,并重写compareTo方法
class Student implements Comparable<Student>{
int age;
String name;
Student(int age,String name){
this.age = age;
this.name = name;
}
@Override
public int compareTo(Student o) {
if(this.age==o.age){
return this.name.compareTo(o.name);
}
return this.age-o.age;
}
}
上述代码,若学生的年龄不同,则返回年龄差。若年龄相同,则用String重写的compareTo方法比较两个学生的名字,返回0,-1或1,以此来排序。
假如a和b都是实现了Comparable接口的类C的实例,那么只有当a.compareTo(b)的结果与a.equals(b)的结果一致时,才称类C的自然顺序与equals一致。强烈建议将类的自然顺序和equals的结果保持一致,因为如果不一致的话,由该类对象为键的sorted map和由该类对象为元素的sorted set的行为将会变得很怪异。
例如对于一个实现了Comparable接口的元素的有序集合sorted set而言,如果a.equals(b)结果为false,并且a.compareTo(b)==0,则第二个元素的添加操作将会失败,因为在sorted set看来,二者在排序上是一致的,它不报保存重复的元素。
Iterator
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
Iterator 是 Java 迭代器最简单的实现
迭代器 it 的三个基本操作是 next 、hasNext 和 remove。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
调用 it.remove() 将迭代器返回的元素删除。
实例:
package com.Factory;
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
// 创建集合
ArrayList<String> sites = new ArrayList<String>();
sites.add("aaa");
sites.add("bbb");
sites.add("ccc");
sites.add("ddd");
// 获取迭代器
Iterator<String> it = sites.iterator();
// 输出集合中的所有元素
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
结果:
aaa
bbb
ccc
ddd
删除元素
要删除集合中的元素可以使用 remove() 方法。
以下实例我们删除集合中小于 100 的元素:
package com.Factory;
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
// 创建集合
ArrayList<Integer> sites = new ArrayList();
sites.add(111);
sites.add(11);
sites.add(22);
sites.add(222);
// 获取迭代器
Iterator<Integer> it = sites.iterator();
// 输出集合中的所有元素
while(it.hasNext()) {
if(it.next()<100)
it.remove();//删小于100的
}
System.out.println(sites);
}
}
结果:
[111, 222]