使用比较器实现list排序

来源:互联网 发布:男发型设计软件下载 编辑:程序博客网 时间:2024/06/06 08:56
           Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作


排序(Sort)使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable接口。此列表内的所有元素都必须是使用指定比较器可相互比较的
1.使用java提供的默认排序方法

主要代码:

List<String> list = new ArrayList();list.add("刘媛媛");

list.add("王硕");
      list.add("李明");
      list.add("刘迪");
       list.add("刘布");


Collections.sort(list,Collator.getInstance(java.util.Locale.CHINA));//注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
for(int i=0;i<list.size();i++)
{
    System.out.print(list.get(i));
}

输出结果:

李明刘布刘迪刘媛媛王硕

2自定义排序规则

(1)model类实现Comparable接口,重写int compareTo(Object o)方法


  model类:

public class StudentDTO implements Comparable
{
 private String name;
 private int age;

public String getName()
{
    return name;
}

public void setName(String name)
{
     this.name = name;
}

public ObjType getType()
{
    return type;
}

public void setAge(int age)
{
     this.age= age;
}

@Override
public int compareTo(Object o)
{

       StudentDTO sdto = (StudentDTO)o;

       int otherAge = sdto.getAge();
      // note: enum-type's comparation depend on types' list order of enum method
      // so, if compared property is enum-type ,then its comparationfollow ObjEnum.objType order


      return this.age.compareTo(otherAge);
}
}

           主方法:           

public static void main(String[] args)
{
      List<StudentDTO> studentList = new ArrayList();

      StudentDTO s1 = new StudentDTO ();

      s.setName("yuanyuan");

      s.setAge(22);

      studentList.add(s1);

                  StudentDTO s1 = new StudentDTO ();

                  s.setName("lily");

                  s.setAge(23);

                  studentList.add(s2);

                  Collections.sort(studentList);  //按照age升序 22,23,

//降序的再调用一次反转(Reverse)

  Collections.reverse(studentList);//23,22

}

降序的另一种实现是直接修改compareTo实现

比如升序的时候

return this.age.compareTo(otherAge);

降序则反过来即可

retrun otherAge.compareTo(this.age);

3,新创建一个比较器类实现Comparator接口,重写int compare(Object o1, Object o2)方法;

 model类:           

public class StudentDTO implements Comparable
{
     private String name;
     private int age;

     public String getName()
     {
         return name;
     }

     public void setName(String name)
    {
         this.name = name;
     }

     public ObjType getType()
     {
         return type;
     }

     public void setAge(int age)
     {
         this.age= age;
     }

           比较器类:

class MyCompartor implements Comparator
{
     @Override
     public int compare(Object o1, Object o2)
    {

           StudentDTO sdto1= (StudentDTO )o1;

           StudentDTO sdto2= (StudentDTO )o2;

           return sdto1.getAge.compareTo(stdo2.getAge())

    }
}

           主方法:

public static void main(String[] args)
{
      List<StudentDTO> studentList = new ArrayList();

      StudentDTO s1 = new StudentDTO ();

      s.setName("yuanyuan");

      s.setAge(22);

      studentList.add(s1);

      StudentDTO s1 = new StudentDTO ();

      s.setName("lily");

      s.setAge(23);

      studentList.add(s2);

      MyComparetor mc = new MyComparetor();

      Collections.sort(studentList,mc);     //按照age升序 22,23,

      Collections.reverse(studentList,mc);    //按照age降序 23,22   

}

升序降序实现方法可参照第二种方式。同样有两种实现方式。




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 18k金变黄了怎么办 苹果7玫瑰金掉色怎么办 浪琴手表没电了怎么办 浪琴手表走的快怎么办 苹果手机掉漆了怎么办 银镀玫瑰金掉色怎么办 6s玫瑰金掉色了怎么办 飞羽花叶子干枯怎么办 种子发芽后倒了怎么办 3d模型加载错误,怎么办 橡皮树长得太高怎么办 金钻的叶子下垂怎么办 水养竹子烂根怎么办 散尾竹叶尖干枯怎么办 眼睛看不清东西视线模糊怎么办 棒球服领子松垮怎么办 裱水彩纸崩了怎么办 裱水彩纸皱起来怎么办 冬天皮肤的皴了怎么办 六个月宝宝皴脸怎么办 婴儿冬天脸裂了怎么办 手裂了怎么办 小妙招 幼儿园孩子不爱写作业怎么办 2岁宝淘气不听话怎么办 2岁宝宝太调皮怎么办 ae视频加载的慢怎么办 我想你了怎么办表情包 腰闪了不能弯腰怎么办 13岁驼背怎么办才能好 脸僵硬笑不出来怎么办 素描排线太乱了怎么办 4岁小儿不爱吃饭怎么办 僵尸农场下架了怎么办 乐视倒闭了手机怎么办 小孩笑起来嘴歪怎么办 小孩嘴歪了怎么办啊 头发长洗头掉发怎么办 头痒又掉头发怎么办 头皮痒而且掉发怎么办 掉一片头发头痒怎么办 头头发掉的厉害怎么办