Collection和Collections的区别
Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List
Collections是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
编程练习题
用程序给出随便大小的10 个整数,序号为1-10,【序号是存储时产生的序号】按从小到大顺序输出,并输出相应的序号。
1、定义类用于封装产生的序号和对应的数据。
2、因为需要对数据进行排序,则必须是可比较的。实现方法可以是类实现Comparable接口,还可以额外定义比较器。
实现Comparable接口表示Number类对象支持比较。
public class Number implements Comparable<Number>{
private int index;
private int number;
public Number() {}
public Number(int index,int number) {
this.index = index;
this.number = number;
}
@Override
public String toString() {
return "Number [index=" + index + ", number=" + number + "]";
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public int compareTo(Number o) {
return this.number - o.number;
}
}
方法1:生成数据并存入到TreeSet中
public class Test1 {
public static void main(String[] args) {
Set<Number> set = new TreeSet<>();
Random rr = new Random();
int i=0;
while(set.size()<10) {
Number temp = new Number(set.size()+1,rr.nextInt(100));
set.add(temp);
}
set.forEach(System.out::println);
}
}
方法2:存储到List中进行排序
public class Test2 {
public static void main(String[] args) {
List<Number> list = new LinkedList<Number>();
Random rr = new Random();
int i=0;
while(list.size()<10) {
Number temp = new Number(list.size()+1,rr.nextInt(100));
if(!list.contains(temp))
list.add(temp);
}
list.sort((obj1,obj2)->{
return obj1.compareTo(obj2);});
list.forEach(System.out::println);
}
}
方法3:存储在List中使用自定义比较器,类并没有实现Comparable接口
public class Test3 {
public static void main(String[] args) {
List<Number> list = new LinkedList<Number>();
Random rr = new Random();
int i=0;
while(list.size()<10) {
Number temp = new Number(list.size()+1,rr.nextInt(100));
if(!list.contains(temp))
list.add(temp);
}
Collections.sort(list,(obj1,obj2)->{
return obj1.getNumber() - obj2.getNumber();
});
list.forEach(System.out::println);
}
}