- 浏览: 185747 次
- 性别:
- 来自: 浙江
文章分类
最新评论
java对于集合的自定义排序方法有:
Arrays.sort(T[],Comparator<? super T> c);
Collections.sort(List<T> list,Comparator<? super T> c);
这里记录下对Comparator的自己理解。
Demo代码如下:
1.实体类代码:
class SortObj {
String letter;
int num;
public SortObj(String letter, int num) {
this.letter = letter;
this.num = num;
}
}
2.Comparator的实现代码,两个类分别为:
/**
* 字符排序(#排于最后)
*/
class StrComparator implements Comparator<SortObj> {
@Override
public int compare(SortObj o1, SortObj o2) {
if("#".equals(o1.letter) && "#".equals(o2.letter)){
return 0;
}else if("#".equals(o1.letter)){
return 1;
}else if("#".equals(o2.letter)){
return -1;
}
return o1.letter.compareTo(o2.letter);
}
}
/**
* 数字排序 (升序)
*/
class NumComparator implements Comparator<SortObj> {
@Override
public int compare(SortObj o1, SortObj o2) {
if(o1.num > o2.num){
return 1;
}else if(o1.num < o2.num){
return -1;
}else{
return 0;
}
}
}
3.调用排序并展示:
findViewById(R.id.btn_num_sort).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.sort(dataNum, new NumComparator());
printInfo(dataNum);
}
});
findViewById(R.id.btn_str_sort).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.sort(dataStr, new StrComparator());
printInfo(dataStr);
}
});
显示结果如下:
数字排序:
SortTest: (b,1) (r,2) (a,2) (a,3) (#,4) (#,5)
字符排序:
SortTest: (a,3) (a,2) (b,1) (r,2) (#,4) (#,5)
排序算法在compare中执行:
返回结果为3种:正整数(1),负整数(-1),0
自己对返回结果的理解(纯属自己的看法):
这个有点冒泡排序的意思,当为正整数时,交换o1与o2的位置,当为负整数时,不换位置
Arrays.sort(T[],Comparator<? super T> c);
Collections.sort(List<T> list,Comparator<? super T> c);
这里记录下对Comparator的自己理解。
Demo代码如下:
1.实体类代码:
class SortObj {
String letter;
int num;
public SortObj(String letter, int num) {
this.letter = letter;
this.num = num;
}
}
2.Comparator的实现代码,两个类分别为:
/**
* 字符排序(#排于最后)
*/
class StrComparator implements Comparator<SortObj> {
@Override
public int compare(SortObj o1, SortObj o2) {
if("#".equals(o1.letter) && "#".equals(o2.letter)){
return 0;
}else if("#".equals(o1.letter)){
return 1;
}else if("#".equals(o2.letter)){
return -1;
}
return o1.letter.compareTo(o2.letter);
}
}
/**
* 数字排序 (升序)
*/
class NumComparator implements Comparator<SortObj> {
@Override
public int compare(SortObj o1, SortObj o2) {
if(o1.num > o2.num){
return 1;
}else if(o1.num < o2.num){
return -1;
}else{
return 0;
}
}
}
3.调用排序并展示:
findViewById(R.id.btn_num_sort).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.sort(dataNum, new NumComparator());
printInfo(dataNum);
}
});
findViewById(R.id.btn_str_sort).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Collections.sort(dataStr, new StrComparator());
printInfo(dataStr);
}
});
显示结果如下:
数字排序:
SortTest: (b,1) (r,2) (a,2) (a,3) (#,4) (#,5)
字符排序:
SortTest: (a,3) (a,2) (b,1) (r,2) (#,4) (#,5)
排序算法在compare中执行:
返回结果为3种:正整数(1),负整数(-1),0
自己对返回结果的理解(纯属自己的看法):
这个有点冒泡排序的意思,当为正整数时,交换o1与o2的位置,当为负整数时,不换位置
发表评论
-
关于Android的webSocket的简单使用
2017-05-12 14:34 991使用第三方jar: autobahn-0.5.0.jar 连 ... -
查看Android虚拟机文件相关命令
2017-05-02 14:12 615我们在虚拟机下添加文件后,想查看下文件是否正确创建,可在win ... -
android6.0创建文件问题
2017-05-02 12:58 591Android在6.0有了动态权限管理,在文件创建时就需要动态 ... -
xutils的http模块的简单使用
2017-04-28 16:05 530先导入xutils相关依赖: compile 'org.xut ... -
Litepal的简单使用
2017-04-27 17:21 646相关包下载地址:https://github.com/Lite ... -
Android下拉刷新上拉加载控件的使用
2017-04-21 10:46 855参考链接:http://www.jianshu.com/p/6 ... -
图片加载框架
2017-04-19 16:29 406图片加载框架: picasso ImageLoader -
Android的Service总结
2017-04-17 15:46 465参考链接:http://www.cnblogs.com/lwb ... -
解决ViewPager的addOnPageChangeListener不加载第一个的问题
2017-03-18 17:53 2658今天在使用ViewPager的时候发现个问题。 需求如下: ... -
clone方法的使用
2017-01-04 10:14 557由于Java有引用这一说,当两个变量指向同一块内存时,改变 ... -
Fragment无法切换问题
2016-12-16 14:57 2116Android有一个回收机制,当内存不足时,会自动回收相关内存 ... -
关于Material Design的CollapsingToolbarLayout初次使用
2016-12-16 13:38 617最近了解了下CollapsingToolbarLayout的使 ... -
MVP模式的学习
2016-12-10 15:15 681以前我写代码都是使用MVC模式,这种模式使Activity变得 ... -
Material Design:Android Design Support Library 介绍
2016-12-10 14:14 480参考链接 : https://blog.leancloud.c ... -
SpannableString简介
2016-12-10 14:03 426参考链接: http://www.cnblogs.com/ji ... -
getResources().getDrawable方法的废弃
2016-12-10 13:20 1242参考链接:http://www.jianshu.com/p/e ... -
关于AndroidStudio的Unsupported major.minor version 52.0异常
2016-12-10 13:15 2382参考链接:http://blog.csdn.net/fakin ... -
Android记录
2015-06-01 10:54 655http://tools.android-studio.org ... -
android自定义控件相关使用
2015-04-24 16:53 616用代码简单介绍下自定义控件的使用: 先看主activity: ... -
android使用html标签
2015-03-13 20:42 734有些时候我们需要在一个textview上,对部分字体进行特殊效 ...
相关推荐
可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组
总之,Comparator接口在Java中提供了强大的工具来实现自定义排序。它不仅能够满足简单的排序需求,也能够处理复杂的排序场景。通过灵活使用Comparator接口,我们能够为不同类型的对象集合定义各种排序规则,使得数据...
因此,了解如何在 Lucene 中实现自定义排序是非常关键的。在这个话题中,我们将深入探讨如何根据特定的业务需求对搜索结果进行定制排序。 首先,我们要明白 Lucene 默认的排序机制。默认情况下,Lucene 搜索结果是...
通过以上分析,我们可以看到Java中的`Comparator`接口是如何被用于自定义排序规则的。它不仅提供了灵活性,还增强了代码的可读性和维护性。在处理复杂数据结构时,合理利用`Comparator`能够显著提高代码的效率和质量...
总之,自定义排序和分组在 MapReduce2 中是通过自定义 Partitioner、Comparator 和 WritableComparator 实现的。这允许开发人员根据业务需求灵活地调整数据处理流程,提高数据处理的效率和准确性。在实际项目中,...
接下来,我们来看看自定义分区(Custom Partitioner)和自定义排序(Custom Comparator)的实现: **自定义分区(Custom Partitioner)**: 默认情况下,MapReduce会根据键的哈希值将数据均匀地分发到不同的Reducer...
如果需要自定义排序规则,如按绝对值排序或负数在前正数在后,可以创建`Comparator<Number>`。同样,`compare()`方法是关键,它接收两个`Number`实例并返回一个整数,指示它们的顺序。 最后,`String+number`的排序...
在Java编程中,`Comparator`接口是用于比较对象的关键工具,尤其在进行自定义排序时。这个接口提供了`compare()`方法,根据特定的规则来决定两个对象的相对顺序。当需要根据多个排序条件对集合进行排序时,可以使用...
它可以轻松地为任何类型的对象提供自定义排序逻辑。这对于处理复杂的数据结构或需要特定排序规则的应用场景来说非常有用。此外,由于`Comparator`允许传递多个实例,因此可以很容易地实现多级排序或其他更复杂的排序...
使用`Comparator`排序时,可以传递给`Collections.sort()`或`Arrays.sort()`方法,例如: ```java List<MyObject> list = ...; Collections.sort(list, new MyComparator()); ``` 此外,`Comparator`还可以通过...
本文将深入探讨如何使用Comparator接口来对Java列表进行自定义排序,并介绍相关的编程概念。 首先,`Comparator`接口在Java中扮演着重要的角色,它允许用户自定义对象的比较规则。`Comparator<T>`接口有一个核心...
比较函数或比较器是自定义排序的核心,它定义了如何比较两个元素并决定它们的相对顺序。 4. **排序算法**:挂号法可能是一种特定的排序算法,但常见的一些排序算法如冒泡排序、插入排序、选择排序、快速排序、归并...
当需要对`List`中的对象进行自定义排序时,`Comparator`接口就派上了用场。`Comparator`是一个可以比较两个对象的类,它提供了一种方式来定义自定义的比较规则,从而实现灵活的排序逻辑。 `Comparator`接口位于`...
- 当内置的排序规则不能满足需求时,可以使用`Comparator`接口来自定义比较逻辑。`Comparator`接口包含一个`compare()`方法,返回值决定了两个对象的相对顺序。 - 用户需要实现`Comparator`接口并重写`compare()`...
Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在...
如果需要自定义排序规则,可以创建一个`Comparator<LocalDate>`实例。 4. 自定义日期排序: 如果需要按照特定规则(例如,先按月份排序,再按日期排序)排序,可以这样实现: ```java List<LocalDate> ...
标准库提供了多种排序方式,其中一种是使用`Comparator`接口来实现自定义排序。本教程将深入探讨如何使用`Comparator`来实现对对象集合的定制排序。 `Comparator`接口位于`java.util`包下,它定义了一个方法`...
2. **设置比较器(Comparator)**:为每一列设置一个自定义的`Comparator`对象,该对象用于确定数据的排序顺序。 3. **注册监听器(MouseListener)**:添加`MouseListener`监听表头点击事件,当用户点击表头时,...
在Python中,可以自定义排序键(key)函数,如使用`sorted()`函数配合`lambda`表达式。在Java中,可以实现`Comparator`接口来指定排序规则。在SQL中,可以使用`CASE`语句来定义排序顺序。 在数据分析和数据科学领域...
在Java编程语言中,特别是在算法竞赛的环境下,经常会遇到需要对数据进行自定义排序的情况。以下将详细讲解三种常见的自定义排序方式: 1. **对象数组排序**: Java不支持像C++那样的结构体,因此当需要处理具有多...