List排序的另一种方法Comparator
(作者:覃煜霖,撰写时间: 2019年 05月 5日)
对List集合中的数据进行排序,还可以使用到Comparator接口对其进行排序。
执行的代码如下:
public abstract class CommparatorTest {
public static void main(String[] args) {
// List*************
Comparator xvLie = new Comparator() {
@Override
public int compare(DataType o1, DataType o2) {
// TODO Auto-generated method stub
return o2.getBit() - o1.getBit();
}
};
List<DataType> dataTypeList2 = new ArrayList<DataType>();
dataTypeList2.add(new DataType("byte", 8, 1));
dataTypeList2.add(new DataType("boolean", 8, 1));
dataTypeList2.add(new DataType("char", 16, 2));
dataTypeList2.add(new DataType("float", 32, 4));
dataTypeList2.add(new DataType("double", 64, 8));
dataTypeList2.add(new DataType("short", 16, 2));
dataTypeList2.add(new DataType("int", 32, 4));
dataTypeList2.add(new DataType("long", 64, 8));
// 方法一
// Collections.sort(dataTypeList2,new Comparator<DataType>() {
//
// @Override
// public int compare(DataType o1, DataType o2) {
// // TODO Auto-generated method stub
// return o2.getBit() - o1.getBit();
// }
// });
// 方法二
Collections.sort(dataTypeList2, xvLie);
Iterator<DataType> i4 = dataTypeList2.iterator();
while (i4.hasNext()) {
DataType dT4 = i4.next();
System.out.println(dT4.getDataType() + "\t" + dT4.getBit() + "\t"
+ dT4.getByteMath());
}
//************************************************TreeSet*************************************************************
Comparator<DataType> xvLie2 = new Comparator<DataType>() {
@Override
public int compare(DataType o1, DataType o2) {
// TODO Auto-generated method stub
return o2.getBit() - o1.getBit();
}
};
//方法一
//Set<DataType> dataTypeSet3 = new TreeSet<>(xvLie2);
//方法二
Set<DataType> dataTypeSet3 = new TreeSet<>(new Comparator<DataType>() {
@Override
public int compare(DataType o1, DataType o2) {
// TODO Auto-generated method stub
return o2.getBit() - o1.getBit();
}
});
dataTypeSet3.add(new DataType("byte", 8, 1));
dataTypeSet3.add(new DataType("boolean", 8, 1));
dataTypeSet3.add(new DataType("char", 16, 2));
dataTypeSet3.add(new DataType("float", 32, 4));
dataTypeSet3.add(new DataType("double", 64, 8));
dataTypeSet3.add(new DataType("short", 16, 2));
dataTypeSet3.add(new DataType("int", 32, 4));
dataTypeSet3.add(new DataType("long", 64, 8));
System.out.println("TreeSet");
Iterator<DataType> i5 = dataTypeSet3.iterator();
while(i5.hasNext()){
DataType dT5 = i5.next();
System.out.println(dT5.getDataType() + "\t" + dT5.getBit() + "\t"
+ dT5.getByteMath());
}
//************************************************TreeMap*************************************************************
Comparator<DataType> xvLie3 = new Comparator<DataType>(){
@Override
public int compare(DataType o1, DataType o2) {
// TODO Auto-generated method stub
return o2.getBit() - o1.getBit();
}
};
//方法一
//Map<DataType, Integer> dataTypeMap2 = new TreeMap<DataType, Integer>(xvLie3);
//
// 方法二
Map<DataType, Integer> dataTypeMap2 = new TreeMap<DataType, Integer>(new Comparator(){
@Override
public int compare(DataType o1, DataType o2) {
// TODO Auto-generated method stub
return o2.getBit() - o1.getBit();
}
});
dataTypeMap2.put(new DataType("byte",8,1),0);
dataTypeMap2.put(new DataType("boolean",8,1),1);
dataTypeMap2.put(new DataType("char",16,2),2);
dataTypeMap2.put(new DataType("float",32,4),3);
dataTypeMap2.put(new DataType("double",64,8),4);
dataTypeMap2.put(new DataType("short",16,2),5);
dataTypeMap2.put(new DataType("int",32,4),6);
dataTypeMap2.put(new DataType("byte",64,8),7);
System.out.println("TreeMap");
Set<DataType> dataTypeSet4 = dataTypeMap2.keySet();
Iterator<DataType> i6 = dataTypeSet4.iterator();
while(i6.hasNext()){
DataType dT6 = i6.next();
System.out.println(dT6.getDataType()+"\t"+dT6.getBit()+"\t"+dT6.getByteMath());
}
Set<Integer> s =new HashSet<Integer>();
s.add(null);
s.add(1);
s.add(1);
System.out.println(s);
}
}