- 使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。
Java Iterator(迭代器)
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
调用 it.remove() 将迭代器返回的元素删除。
Comparator
Comparable & Comparator都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,
Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法或在集合内实现 Comparable接口的方法,
Comparator位于包java.util下,而Comparable位于包java.lang下。
int compare(T o1, T o2)
int compare(T o1, T o2)和上面的x.compareTo(y)类似,定义排序规则后返回正数,零和负数分别代表大于,等于和小于。
1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有intValue方法,Double,Long等都有此方法。
2.此方法的意思是:输出int数据。每个数值类中具体的实现是不同的。例如: Float类和Double类的intValue方法,就是丢掉了小数位,而Long的intValue方法又不一样的
package test06;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet cc = new TreeSet(new MyComparator());
for(int i = 1;i<=10;i++) {
cc.add(new Integer(i));
}
/** Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
调用 it.remove() 将迭代器返回的元素删除。
*/
Iterator it = cc.iterator();
while(it.hasNext()) {
System.out.print(it.next()+" ");
}
}
}
/**Comparable & Comparator都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,
* Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法或在集合内实现 Comparable接口的方法,
* Comparator位于包java.util下,而Comparable位于包java.lang下。
*/
class MyComparator implements Comparator {
/**
* int compare(T o1, T o2)和上面的x.compareTo(y)类似,定义排序规则后返回正数,零和负数分别代表大于,等于和小于。
* */
public int compare(Object o1, Object o2) {
/**
* 1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有intValue方法,Double,Long等都有此方法。
2.此方法的意思是:输出int数据。每个数值类中具体的实现是不同的。例如:
Float类和Double类的intValue方法,就是丢掉了小数位,而Long的intValue方法又不一样的
*/
int num1 = ((Integer) o1).intValue();
int num2 = ((Integer) o2).intValue();
int type1 = num1 % 2;
int type2 = num2 % 2;
if (type1 > type2) {
return -1;
}
else if (type1 < type2) {
return 1;
}
else {
if (type1 == 0) {
//如果type1=0,则是偶数,需要从大到小排列,则比较num1、num2的大小,num1 > num2返回-1(判断为小于则先输出num2);num1 < num2返回1(判断为大于先输出num1)
if (num1 > num2) return -1;
else if (num1 < num2) return 1;
} else if (type1 == 1) {
//如果type1=1,则是奇数,需要从小到大排列,则比较num1、num2的大小,num1 > num2返回1;num1 < num2返回-1
if (num1 > num2) return 1;
else if (num1 < num2) return -1;
}
}
return 0;
}
}
运行截图: