java--对象比较器

  • 在实际的项目中,经常会遇到排序问题,对于基本数据类型java支持Arrays.sort()和Collection.sort()对集合进行排序,但是对用户自定义类型排序呢?java给我们提供了两种解决方案。

一:通过实现Comparable<Object> 在内部实现

示例代码:

package com.lky.model;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Student implements Serializable, Comparable<Student> {

    private String name;
    private Integer id;
    private String log;

    public String getName() {
        return name;
    }

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

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLog() {
        return log;
    }

    public void setLog(String log) {
        this.log = log;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", id=" + id + ", log=" + log + "]";
    }

    @Override
    public int compareTo(Student o) {
        return o.getId()-id;
    }

}

二.通过实现 Comparator<Object> 来定义排序规则

示例代码:

package com.lky.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

import org.junit.Test;

import com.lky.model.Student;

public class compartorTest {

    public class OutComparator implements Comparator<Student> {

        @Override
        public int compare(Student o1, Student o2) {
            int result = 0;
            result = o1.getId() - o2.getId();

            if (result == 0) {
                return o1.getName().compareTo(o2.getName());
            } else {
                return result;
            }
        }
    }

    @Test
    public void test() {
        List<Student> array = new ArrayList<Student>();
        for (int i = 0; i < 20; ++i) {
            Student student = new Student();
            student.setId(new Random().nextInt(10) + 1);
            student.setLog("log" + i);
            student.setName("lky" + i);
            array.add(student);
        }
        Collections.sort(array);// 采用默认排序
        // Collections.sort(array, new OutComparator());//采用自定义排序
        for (Student student : array) {
            System.out.println(student);
        }
    }

}
时间: 2024-10-18 05:16:14

java--对象比较器的相关文章

Java对象比较器对泛型List进行排序-Demo

针对形如:字段1 字段2 字段3 字段n 1 hello 26 7891 world 89 5562 what 55 4562 the 85 452 fuck 55 995 haha 98 455 以上类型的查询数据结果,需要对 字段3 进行求和分组(在SQL查询无法一次性完成的情况下,通常采用Java分组排序),大概思路如下: 1.在Bean中添加相关的分组标记字段,对求和或者其它统计的结果进行插入分组标记,下面demo中为bigIdOrder标记 2.对完成标记的List进行标记的补全 3.

我爱java系列---【java对象比较器,用于记录修改操作时修改的具体详情】

对象比较器 public class LogUtils<T> { /** * 对象比较器 * 比较结果eg:1.字段名称loginName,旧值:liu,新值:gu;2.字段名称address,旧值:hunan,新值:neimenggu * @param oldBean * @param newBean * @return */ public String compareObject(Object oldBean, Object newBean) { String str = "&q

java对象比较器和克隆

一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类 .我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要使用到.那么String类和自定义类能不能使用Arrays.sort()来进行排序呢.下面我们来试试,如下: Java代码 publicclassMystring { publicstaticvoidmain(String[] args) { String []a={"早上","

【java对象比较器和克隆】

一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类.我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要使用到.那么String类和自定义类能不能使用Arrays.sort()来进行排序呢.下面我们来试试,如下: public class Mystring { public static void main(String[] args) { String []a={"早上","中午&

JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/

/** * Math类.Random类.Arrays类:具体查JAVA手册...... */ public class Main { public static void main(String[] args) { String[] s1 = {"a","b","c","d","e"}; String[] s2 = {"a","b","c",&qu

Java的比较器

package com.kk.Collection; import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List; public class CompareTest { public static void main(String[] args) { List<Student> list=new ArrayList<Student>

JVM —— Java 对象占用空间大小计算

零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 需要知道缓存的对象是否会超过 JVM 最大堆限制, 如果会超过要设置相应算法如 LRU 来丢弃一部分缓存数据以满足后续内容的缓存 JVM 参数设置: 如果知道对象会被创建, 可以帮助判断 -Xmx 需要设置多少 只是为了好玩 一. 对象的内存布局 HotSpot 虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instan

利用Apache的commons-beanutils和commons-collections包实现Java对象的按属性排序

在日常工作中经常用到需要对java对象集合或者Map集合中的某个属性做排序,这个需求可以利用Apache的commons-beanutils和commons-collections包来实现,主要实现方式如下: public static <T> void sort(List<T> list, String property, boolean asc) { Comparator<?> comparator = ComparableComparator.getInstanc

Java对象的内存布局

Java对象的内存布局:对象头(Header),实例数据(Instance Data),对齐填充(Padding):另外:不同的环境结果可能有差异,我所在的环境是HotSpot虚拟机,64位Windows. 对象头 对象头在32位系统上占用8bytes,64位系统上占用16bytes. System.out.println("sizeOf(new Object()) = " + sizeOf(new Object())); sizeOf(new Object()) = 16 实例数据

JAVA对象头

#为了防止自己忘记,先记着,之前我一直以为<深入理解JAVA虚拟机>写错了来着. 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding). 也就是说  JAVA对象 = 对象头 + 实例数据 + 对象填充 对象头由两部分组成,一部分用于存储自身的运行时数据,称之为 Mark Word,另外一部分是类型指针,及对象指向它的类元数据的指针. 对象头 = Mark Word + 类型指针 (未开启指