java关于List数组和类数组中的Collections和Arrays的sort区别
程序员文章站
2022-06-10 22:17:03
...
关于List数组和类数组中的Collections和Arrays的sort区别
总体上来说是酱紫的,Collections只要List定义的里面装的类数组,而Arrays都可以接受,你以为Celletions很小气?不,List里面可以装很多类型的类数组,从这方面也可以。据说Cllections可以装非List的,但是我没搞明白,详情见
https://www.cnblogs.com/zhumengdexiaobai/p/10459441.html
接下来是验证
(1)Arrays对上基础类数组,直接调用即可;
int[] logo= {12,23,221,122};
Arrays.sort(logo);
for(int i=0;i<logo.length;i++) {
System.out.println(logo[i]);
}
结果:
(2)Collections.sort对上基础类数组
ArrayList<Integer> num=new ArrayList<Integer>();
num.add(11);
num.add(1);
num.add(78);
Collections.sort(num);
for(int i=0;i<num.size();i++) {
System.out.println(num.get(i).intValue());
}
结果:
(3)Arrays对其他的类数组排序
Animal[] animal=new Animal[] {new Animal(1),new Animal(122),new Animal(491),new Animal(133),new Animal(891)};
Arrays.sort(animal);
for(Animal temp:animal) {
System.out.println("id:"+temp.id);
}
结果:
(4)Collections.sort对上其他类数组
List<Animal> lago=new ArrayList<Animal>();
lago.add(new Animal(123));
lago.add(new Animal(145));
lago.add(new Animal(156));
lago.add(new Animal(134));
lago.add(new Animal(178));
Collections.sort(lago);
for(int i=0;i<lago.size();i++)
System.out.println(lago.get(i).id);
结果是:
除了基础类和String不需要有重定义的函数外(java内部已经帮忙定义过了),其他自己的类要定义,有两种方式,一种是类在定义的时候,就与comparable接口,第二种是已经定义了,没有接口,那么就要为这个类重新创建一个类<已定义的类>去接口comparator进行实现。
第一种:类在定义的时候,就与comparable接口,
class Animal implements Comparable<Animal>{
int id;
Animal(int id){
this.id=id;
}
@Override
public int compareTo(Animal arg0) {
// TODO Auto-generated method stub
return this.id>arg0.id?1:-1;
}
}
第二种:重新创建一个类去接口comparator进行实现
class Card{
char suit;
char rank;
double randomValue;
Card(char aSuit,char aRank)
{
suit=aSuit;
rank=aRank;
randomValue=Math.random();
}
void dipaly()
{ System.out.println( Character.toString(suit)+Character.toString(rank));
}
}
class conpareRandomValue implements Comparator<Card>{
@Override
public int compare(Card arg0, Card arg1) {
// TODO Auto-generated method stub
return arg0.randomValue>arg1.randomValue? 1:-1;
}
}
定义后,都可以通过Collections.sort或者Arrays.sort进行分类