CollectionsDemo1+2 List集合普通元素的排序,自定义类型的排序

CollectionsDemo1 List集合普通元素的排序,自然排序

/**
 * List集合的排序
 * 排序List集合使用集合的工具类Collections的静态方法sort,
 * 该方法可以对指定List集合进行自然排序(从小到大)
 */
public class SortDemo1 {

    public static void main(String[] args) {
        //1,生成一个List<Insteger>集合
        List<Integer> list = new ArrayList<Integer>();

        //2.为集合添加随机10个随机整数,作为元素
        Random rand = new Random();
        for(int i=0;i<10;i++){
            list.add(rand.nextInt(100));
        }

        //3.输出集合,查看list内的元素
        System.out.println(list);    //[90, 71, 17, 57, 90, 69, 48, 82, 31, 41] 

        //4.对集合进行排序,用Collections类的静态方法之一 sort
        Collections.sort(list);

        //5.输出集合,查看list内的元素
        System.out.println(list);    //[12, 12, 20, 27, 33, 58, 60, 66, 70, 71]

        //6.针对总结2进行测试,排序字符串
        List<String> strList = new ArrayList<String>();
        strList.add("Mary");
        strList.add("Lee");
        strList.add("Varen");
        strList.add("Garen");
        strList.add("爸爸");
        strList.add("维恩");
        strList.add("阿满");
        strList.add("成吉思汗在北京");
        strList.add("成吉思汗");

        //7.输出结果
        System.out.println(strList);
        Collections.sort(strList);
        System.out.println(strList);
        /*
         * [Mary, Lee, Varen, Garen, 爸爸, 维恩, 阿满, 成吉思汗在北京, 成吉思汗]
           [Garen, Lee, Mary, Varen, 成吉思汗, 成吉思汗在北京, 爸爸, 维恩, 阿满]
         */

        //8.针对总结3,测试自定义元素能否用次方法排序
        List<Point> pointList = new ArrayList<Point>();
        pointList.add(new Point(3,7));
        pointList.add(new Point(3,5));
        pointList.add(new Point(5,2));
        pointList.add(new Point(4,3));

//        Collections.sort(pointList);    编译出错

    }
    /**
     * 总结
     * 1.只能根据Collections.sort方法的自然顺序排序,只能由小到大排序.
     * 2.想要排序的不是数值能排序么?按照什么顺序排序呢?
     *   测试结论:字符串也能排序,根据英文字母的ascii值,由小到大.中文则无规律.
     * 3.对自定义的类型元素,能排序么?
     *      测试结论:Collections.sort(pointList);编译报错.
     *      说明单独使用这个方法没法对自定义类型元素进行排序,需要另寻求解决办法
     */
}

CollectionsDemo2 List 自定义类型元素的排序

/**
 *    自定义类型元素的排序,用Collections的静态方法sort怎么实现呢?
 *    注意:这里首先自定义个类(Point),才能实验下面这个Demo
 *    关键点: 使用Comparator接口实现对集合中的元素排序
 *
     总结:
     1.排序自定义元素的方法,用Collections.sort可以实现.
     前提是,需要实现Comparator接口并实现compareTo方法,定义比较规则.
     2.但是,有一点弊端,就是为了实现Collections.sort方法,需要在我们
     自己的类中定义其他的方法,"侵入性"太强,有没有更好的解决办法呢?

 */
public class CollectionsDemo2 {

    public static void main(String[] args) {
        //1.建立自定义元素的集合List
        List<Point> list = new ArrayList<Point>();

        //2.在集合中添加Point类型的对象
        list.add(new Point(8,3));
        list.add(new Point(10,9));
        list.add(new Point(5,6));
        list.add(new Point(2,3));
        list.add(new Point(1,5));
        System.out.println(list);    //输出未排序结果
//        [Point [x=8, y=3], Point [x=10, y=9], Point [x=5, y=6], Point [x=2, y=3], Point [x=1, y=5]]

        //3.我们知道,用Collections.sort(list)进行排序,会报错
        /*关键点: 使用Comparator接口实现对集合中的元素排序
          首先Point类需要实现Comparator接口,并实现其compareTo的抽象方法.
          这里需要注意, Compartor<T>接口也是可以指定泛型的.一般定义成跟类同类型.
         compareTo(指定对象)方法 返回值int
         返回值>0  这个对象大于指定对象
         返回值<0 这个对象小于指定对象
         返回值=0 这个对象等于指定对象
        */
        Collections.sort(list);        //再Point类重写compareTo方法后,Collections.sort编译通过
//      [Point [x=2, y=3], Point [x=1, y=5], Point [x=5, y=6], Point [x=8, y=3], Point [x=10, y=9]]
        System.out.println(list);    //输出排序后结果
    }
}

实验用Point类

public class Point implements Comparable<Point>{
    private int x;
    private int y;

    public Point(int x, int y) {
        super();
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }

    @Override
    public String toString() {
        return "Point [x=" + x + ", y=" + y + "]";
    }

    @Override
    public int compareTo(Point o) {
        /*
         * 坐标点的比大小,比该点到远点的距离,即比两个坐标点 x*x+y*y 的大小
         * */
        int tLeng = this.x*this.x + this.y*this.y;
        int oLeng = o.x*o.x + o.y*o.y;

        return tLeng - oLeng;
    }
}

时间: 2024-11-08 13:40:04

CollectionsDemo1+2 List集合普通元素的排序,自定义类型的排序的相关文章

java自定义类型 比较排序 Comparator接口

String service_time = "6:00:00,7:00:00,8:00:00,9:00:00,10:00:00,11:00:00,12:00:00,13:00:00,14:00:00,15:00:00,16:00:00,17:00:00,18:00:00,19:00:00,20:00:00,21:00:00,22:00:00 "; List<String> list = StringUtil.stringToList(service_time, "

java编程排序之自定义类型的集合,按业务需求排序

自定义引用类型放入集合中,按实际业务需求进行排序的两种思路 第一种思路: (1)自定义实体类实现java.lang.Comparable接口,重写public int compareTo(Object obj)方法.自定义业务比较规则 (2)利用java.util.Collections类的静态方法sort(List<自定义类型> list)进行排序(默认升序)或者.自己编写排序工具类.冒泡+compareTo(obj)方法 第二种思路 (1)自己编写业务比较规则类.实体类不用实现任何借口.业

C# 自定义类型数组的排序

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 数组排序 8 { 9 /// <summary> 10 /// IComparable : 接口 11 /// </summary> 12 public class Student : IComparabl

重写Oracle的wm_concat函数,自定义分隔符、排序

oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我们不知道oracle中的over函数,也不知道listagg函数. 我们先来看看wm_concat函数能实现什么功能,通俗点==>列传行,如果不明白,请看下面截图(可以看到分隔符默认为','顺序也是杂乱的)          所以,接下来,我们开始重写wm_concat函数(需要注意和需要说明的地方

集合框架(ArrayList存储自定义对象并遍历泛型版)

//集合框架(ArrayList存储自定义对象并遍历泛型版) package cn.itcast_02; import java.util.ArrayList; import java.util.Iterator; /* * 需求:存储自定义对象并遍历. * * A:创建学生类 * B:创建集合对象 * C:创建元素对象 * D:把元素添加到集合 * E:遍历集合 */ public class ArrayListDemo2 { public static void main(String[]

对自定义对象进行排序(C++/Java)

自定义了对象,如何按照自定对象中某一或多个元素对其进行排序呢?以下分别从C++和java对其进行实现. 一:C++ /* 实现对自定义的对象类型进行排序(按照其中的元素),首先将对象存放在vector中,然后利用algorithm库函数中的sort对其进行排序,需要重写排序函数以函数名 作为函数指针作为sort的第三个参数 */ #include <iostream> #include <string> #include <algorithm> #include <

去除List集合中的重复元素? 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型,自定义类型)?

 关键字: 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型)?  *   *     思考: List就可以存储重复元素,那么需求中容器中的元素必须保证唯一性,该如何解决呢??  *      *   去除List集合中的重复元素?  * * 思路: * * 1.首先我需要另一个临时容器tempList,用来存放我认为应该保留的元素.(也就是不重复的元素) * 2.然后我们应该遍历原容器, 一个一个的取出元素, 放入tempList. * 当tempList里已经装有刚刚取出的

Axis2Service客户端访问通用类集合List自定义类型

Axis2 服务四种客户端调用方式: 1.AXIOMClient 2.generating a client using ADB 3.generating a client using XMLBeans 4.generating a client using JiBX http://axis.apache.org/axis2/java/core/ 官方 搜索了很多资料,没有找到合适的.不论是插件生成还是AXIOMClient使用起来都很麻烦. service: public interface

Hadoop学习之自定义二次排序

一.概述    MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往 往有要对reduce输出结果进行二次排序的需求.对于二次排序的实现,本文将通过一个实际的MapReduce二次排序例子讲述 二次排序的实现和其MapReduce的整个处理流程,并且通过结果和map.reduce端的日志来验证所描述的处理流程的正确性. 二.需求描述 1.输入数据: sort1    1 sort2    3 sort2