首页 > 其他分享 >List集合排序 sort方法

List集合排序 sort方法

时间:2023-04-28 12:55:24浏览次数:44  
标签:sort List age list add 排序 public

List集合排序

sort方法:

  • public static void sort(List list) :将集合中元素按照默认规则排序。

  • public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排

序。

sort方法的重载使用1

1.字符串作为集合中的类型进行排序

public class Demo {
    public static void main(String[] args) {
        //定义一个字符串的list集合,并排序
        List<String> list = new ArrayList<>();
        list.add("123");
        list.add("213");
        list.add("abc");
        list.add("aac");
        list.add("112");
        list.add("224");
        list.add("223");
        list.add("Aac");
        System.out.println(list);
        //[123, 213, abc, aac, 112, 224, 223, Aac]

        Collections.sort(list);
        System.out.println(list);
        //[112, 123, 213, 223, 224, Aac, aac, abc]
    }
}

如果想要使用该方法进行排序,条件是:集合中的类型T必须是Comparable的子类型。

String是Comparable的子类型,所以支持排序。

字符串排序的规则:先从字符串中的第一个字符开始比较其编码的大小,按照升序排序。如果第一个相同比较第二个,如果第二个相同比较第三个.......

2.自定义类型实现排序

自定义学生类型含有年龄,名称属性,创建多个学生对象。放入List集合按照年龄升序排序。

package com.liqiliang.demo02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<>();
        list.add(new Student("迪丽热巴",28));
        list.add(new Student("呜呜",20));
        list.add(new Student("马尔扎",19));

        Collections.sort(list);
        System.out.println(list);
        //[Student{name='呜呜', age=20}, Student{name='马尔扎', age=19}, Student{name='迪丽热巴', age=28}]
    }
}


class Student implements Comparable<Student>{
    String name;
    int age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Student o) {
        //如何重写方法
        //按年龄升序排序比较
        //this(当前调用方法的对象)   o(参数传入)
        //所有比较最底层的逻辑都是发生两两比较逻辑的,返回比较结果
        //只关心结果结果三种:
        //正数:   this.age - o.age    >
        //负数:   this.age - o.age    <
        //0       this   ==


//        return this.age-o.age; 升序排序
//        return o.age-this.age; 降序排序
        //按照名字字符串长度升序排序
        return this.name.length()-o.name.length();
    }
}

sort方法的重载使用2

  • public static void sort(List list,Comparator<? super T> ) :将集合中元素按照指定规则排

序。

方法可以可以接收任意类型的数据,以进行排序。T没有要求

不管T是否是Comparable的子类型,都无所谓了。采用的标准是Comparator的比较标准。

int compare(T o1, T o2);

目的就是为了比较o1和o2的大小
原始的排序:o1 , o2
返回值int:只关心正负或者0
  如果返回值为负数:o1 < o2   ==> o1 o2
  如果返回值为正数:o1 > o2   ==> o2 o1
  如果返回值为0:o1 == o2   ==> o1 o2
public class Demo01 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abc12");
        list.add("AA");
        list.add("1ab123123");
        list.add("abdsdfsd");
        list.add("Abcsdfsfsdfsdsdg");
        list.add("2bcsd");
        Collections.sort(list);
        System.out.println("list = " + list);
        //按照字符串的长度升序排序
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });
        System.out.println("list = " + list);

    }
}

区别:

Comparable:是让一个类具备比较排序的功能

Comparator:自己定义的一个比较器

注意:如果比较的属性类型是浮点型

 public int compareTo(T o); //抽象方法
//子类实现后,需要进行重写

返回值int,只关心正负或者0,不需要关系具体值
  
原始排序:this【我】  o【他】
如果要升序排序:我减他
如果要降序排序:他-我
    
如果比较的属性类型是浮点型:
    this.score = 99.9     o.score = 99.5
      if(this.score>o.score){
        return 1;
    }else if(this.score<0.score){
        return -1;
    }else{
        return 0;
    }

唯有努力,人生没有白走的路,每一步都算数

标签:sort,List,age,list,add,排序,public
From: https://www.cnblogs.com/fly520/p/17361806.html

相关文章

  • 详解八大排序(附动图和源码)
    目录......
  • pyqt5-QListWidget
    1、介绍list组件,或者说列表组件。2、类和初始化classQListWidget(QListView):快速查询:QListWidget(parent:typing.Optional[QWidget]=None)addItem(self,aitem:QListWidgetItem)addItem(self,label:str)addItems(self,labels:Iterable[str])clear(self)closeP......
  • 获取最近7天的日期List列表
    importcn.hutool.core.date.DateField;importcn.hutool.core.date.DateUtil;/***获取最近7天的日期*@returnList*/privateList<LastWeekDateVo>generate7DateList(){List<LastWeekDateVo>list=newArrayList<>();DatecurrentDate=newDate......
  • wordpress产品排序
    updatewp_postssetmenu_order=100wherepost_type='product';updatewp_postssetmenu_order=5wherepost_name='r-m-williams-craftsman-boot_792c678e';updatewp_postssetmenu_order=10wherepost_name='r-m-williams-rod-polo_ee292998......
  • 【二分查找】LeetCode 153. 寻找旋转排序数组中的最小值
    题目链接153.寻找旋转排序数组中的最小值思路首先分析一下旋转数组可能有的状态:左<中<右,此时最小值肯定在左边,应当收缩右边界左<中,中>右,此时最小值肯定在右半段,应当收缩左边界左>中,中<右,此时最小值肯定在左半段,应当收缩右边界分析这三种状态可以发现,中值小......
  • 【CPP】自定义排序--针对智能指针
    目录代码块代码块#include<iostream>#include<memory>#include<vector>#include<algorithm>usingnamespacestd;classBase{public:virtualvoidPrint(){std::cout<<"IamBase!\n";}};classDerived1:publi......
  • 手把手教你掌握冒泡排序思路
    完整代码:#include<stdio.h>bubble_sort(intarr[],intsz){inti=0;intj=0;for(i=0;i<sz-1;i++){for(j=0;j<sz-1-i;j++){if(arr[j]>arr[j+1]){inttmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}}}intmain(){intarr[10]=......
  • JDBC使用List和Map键值封装多表查询结果 java JDBC insert查询返回List对象
    JDBC使用List和Map键值封装多表查询结果https://www.cnblogs.com/zengyu1234/p/15451812.html查询结果的处理Java.sql.ResultSet接口是jdbcAPI中唯一用来封装查询结果记录行的组件。ResultSet接口唯一创建方式是通过执行SQL查询返回创建此对象 遍历结果集中数据truenext......
  • asp.net 绑定数组数据到下拉列表,绑定数组到DropDownList,数据绑定
    前台代码:<asp:DropDownListID="ddlHPZL"runat="server"Width="130px"></asp:DropDownList>后台代码:#region绑定号牌号码string[]iniHPHM=newstring[];iniHPHM=["辽P,京A,京B,吉C,黑D,云E,蒙F,"]......
  • List与HashMap区别,key,value,感谢火龙果,dgqbcht,awusoft帮助
    首先要感谢不想要妮称,dgqbcht,awusoft友情帮助Map是一个映射,是key-value值对.Map在java1.0以后进行了修改,使其能够与普通的集合相融.在Map的内部定义了内部接口Entry,主要就是要讲key和value以集合(Set)的形式来体现.List是集合的一个分支,是一个接口.List中的元素有顺序(输......