iterator
iterator(迭代器):iterator()方法是Interator接口的类型,但并不是说它是返回一个接口,只是返回实现这个接口的类的实例,但是具体是那一个类我们无从得知,我们只知道可以通过这个接口的方法去操纵返回回来的对象,这就是多态。
步骤:
- 通过调用类集的iterator()方法获得对类集头的迭代函数。
- 建立一个调用hasNext()方法的循环,只要hasNext()返回true,就进行循环迭代。
- 在循环内部,通过调用next()方法来得到每一个元素。
package iterator;
import java.util.HashSet;
import java.util.Iterator;
/**
* @Auther: Xinbai
* @Date:2020/5/10 9:47
*/
public class IteratorTest {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
set.add("e");
Iterator iter = set.iterator();
while (iter.hasNext()) {
String value = (String) iter.next();
System.out.println(value);
}
}
}
输出结果:
a
b
c
d
e
除了用while。for循环也可以
for (Iterator iter1 = set.iterator(); iter.hasNext(); ) {
String value = (String) iter.next();
System.out.println(value);
}
SortedSet
SortedSet 定义的排序规则有两种:
1). natural ordering 自然排序。
2). Comparator ordering 通过特定定义的规则来排序,通常这种定义的规则是由自己来定义的。
SortedSet接口的实现类及相应的方法,一般用的最多的是TreeSet这个实现类,这个类实现了SortedSet接口,所有它是带排序的。
TreeSet和Comparator
package iterator;
import java.util.TreeSet;
/**
* @Auther: Xinbai
* @Date:2020/5/10 11:09
*/
public class TreeSetTest {
public static void main(String[] args) {
TreeSet set=new TreeSet();
set.add("C");
set.add("S");
set.add("D");
set.add("N");
set.add("A");
System.out.println(set);
}
输出结果:
[A, C, D, N, S]
【说明】:这边可以看出排序是有序,定义的规则是TreeSet中的自然法则来排序的。
自定义排序
例子1、打印正序字母
package iterator;
import java.util.Iterator;
import java.util.TreeSet;
/**
* @Auther: Xinbai
* @Date:2020/5/10 11:33
*/
public class TreeSetTest1 {
public static void main(String[] args) {
TreeSet set=new TreeSet();
set.add("C");
set.add("S");
set.add("D");
set.add("N");
Iterator iter=set.iterator();
while (iter.hasNext()){
String value=(String)iter.next();
System.out.println(value);
}
}
}
输出结果:
C
D
N
S
【说明】:在没有定义规则之前,程序排序是按自然规则排序,打印的。现在利用Iterator接口的实现类定义自己的排序规则[将英文元素倒序排序]
例子2、反序输出
定义排序规则步骤:
- 选择TreeSet中的构造方法:public TreeSet(Comparator comparator)这个构造方法。
- 定义一个类实现Comparator这个接口
- 实现这个接口中的 compare(T o1, T o2)方法。[这个方法就是体现自定义的规则,这个规则在这个方法中体现]
package iterator;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
/**
* @Auther: Xinbai
* @Date:2020/5/10 11:33
*/
public class TreeSetTest1 {
public static void main(String[] args) {
TreeSet set=new TreeSet(new TSet());
set.add("C");
set.add("S");
set.add("D");
set.add("N");
Iterator iter=set.iterator();
while (iter.hasNext()){
String value=(String)iter.next();
System.out.println(value);
}
}
}
class TSet implements Comparator {
@Override
public int compare(Object o1, Object o2) {
String s1=(String)o1;
String s2=(String)o2;
return s2.compareTo(s1);
}
}
输出结果:
S
N
D
C
package iterator;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
/**
* @Auther: Xinbai
* @Date:2020/5/10 11:17
*/
public class TreeSetTest2 {
public static void main(String[] args) {
TreeSet set = new TreeSet(new PerComparator());
Student s1 = new Student(10);
Student s2 = new Student(20);
Student s3 = new Student(30);
Student s4 = new Student(40);
Student s5 = new Student(50);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
set.add(s5);
// System.out.println(set);
Iterator iter = set.iterator();
while (iter.hasNext()) {
Student value = (Student) iter.next();
System.out.println(value.score);
}
}
}
class Student {
int score;
public Student(int score) {
this.score = score;
}
//重写这个toString方法是为了main方法中的打印set能打印出score,如果不重写这个方法,则直接调用set的这个引用的toString方法
public String toString() {
return String.valueOf(this.score);
}
}
class PerComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Student ss1 = (Student) o1;
Student ss2 = (Student) o2;
return ss1.score - ss2.score;
}
}
输出结果:
10
20
30
40
50