java List 排序 Collections.sort() 对 List 排序
//一个POJO例子
class User {
String name;
String age;
public User(String name,String age){
this.name=name;
this.age=age;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体的比较类,实现Comparator接口
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class ComparatorUser implements Comparator{
public int compare(Object arg0, Object arg1) {
User user0=(User)arg0;
User user1=(User)arg1;
//首先比较年龄,如果年龄相同,则比较名字
int flag=user0.getAge().compareTo(user1.getAge());
if(flag==0){
return user0.getName().compareTo(user1.getName());
}else{
return flag;
}
}
}
//测试类
public class SortTest {
public static void main(String[] args){
List userlist=new ArrayList();
userlist.add(new User("dd","4"));
userlist.add(new User("aa","1"));
userlist.add(new User("ee","5"));
userlist.add(new User("bb","2"));
userlist.add(new User("ff","5"));
userlist.add(new User("cc","3"));
userlist.add(new User("gg","6"));
ComparatorUser comparator=new ComparatorUser();
Collections.sort(userlist, comparator);
for (int i=0;i<userlist.size();i++){
User user_temp=(User)userlist.get(i);
System.out.println(user_temp.getAge()+","+user_temp.getName());
}
}
}
//首先年龄排序,如果年龄相同,则按名字排序
结果:
1, aa
2, bb
3, cc
4, dd
5, ee //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
5, ff
6, gg
分享到:
相关推荐
排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能的方式;组合则是指不考虑元素的顺序,仅考虑元素的选取。在这个问题中,我们不仅要考虑元素的选取,还要考虑它们的顺序,因此属于...
它可以将待排序的序列构造成一个大顶堆或小顶堆,然后交换堆顶元素与最后一个元素,再调整堆,这样依次将元素放入已排序部分。 这些排序算法在实际应用中各有优缺点,例如,冒泡排序和插入排序简单但效率较低,适用...
在C语言中实现堆排序时,通常会涉及到以下几个关键步骤: 1. **构建最大堆**:首先需要构建一个最大堆,即对于每个非叶子节点i,都有`heap[i] >= heap[2*i]`且`heap[i] >= heap[2*i+1]`。 2. **交换堆顶元素与堆尾...
选择排序每次从未排序的元素中找到最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。PHP中的实现如下: ```php function selectionSort($arr) { $len = count($arr); for ($i = 0...
- **插入排序**:将一个或几个记录从无序序列中“插入”到已排序序列的适当位置。 - **交换排序**:如冒泡排序、快速排序,通过元素之间的交换将关键值较小的元素逐步移到前面。 - **选择排序**:每次从未排序部分...
可以创建一个最小堆,然后将数组中的元素依次添加到堆中,每次添加后都弹出堆顶元素,重复K次。这样,最后堆顶的元素就是第K大的元素。时间复杂度为O(n log k),对于K远小于n的情况,这是一种高效的方法。 下面是...
通过一个迭代器变量,从头到尾依次访问每个元素。 6. **释放List**: 在不再使用List时,需要释放其占用的内存,避免内存泄漏。 在实现这些操作时,我们还需要注意以下几点: - **类型安全**:C语言没有泛型,...
根据提供的文档信息,本文将对数据结构中的排序算法进行详细解析,主要聚焦于几种常见的排序方法,包括直接插入排序、希尔排序以及冒泡排序,并基于C++语言实现这些算法。 ### 一、直接插入排序 #### 算法原理: ...
根据提供的部分代码,我们可以将其拆分为几个主要的功能模块来深入理解: ##### 1. 输入数据结构定义 - **bian**: 表示顶点的数量。 - **HashSet array**: 存储所有顶点值。 - **ArrayList list**: 存储各个顶点的...
本篇内容聚焦于几种基本排序算法的介绍,包括插入排序、选择排序以及希尔排序,并在Sortable_list类中提供了这些排序方法的实现框架。 首先,排序的定义是将一个包含n个节点的序列通过调整顺序,使得它们的关键字值...
* 实现了几个排序算法:InsertSort1、InsertSort2、ShellSort1 这些源程序代码是实验的核心部分,用于实现排序算法的实现。 三、InsertSort1 和 InsertSort2 算法 InsertSort1 和 InsertSort2 是两种直接插入排序...
在函数内部,主要逻辑分为以下几个步骤: 1. 分配两个整数数组 `start` 和 `end`,它们用于存储每个桶(队列)的头部和尾部索引。这些桶代表了不同数字可能出现的值范围。 2. 初始化链表结构,使每个元素的 `link` ...
拓扑排序是对有向无环图的顶点进行线性排序的一种方法,使得对于图中的每条有向边 (u, v),顶点 u 都排在顶点 v 之前。换句话说,拓扑排序的结果是一个顶点的线性序列,其中如果存在一条从顶点 i 到顶点 j 的路径,...
创建链表时,需要根据用户输入的元素数量`n`来动态分配内存,并逐个添加节点。代码实现如下: ```c list* creat(int n) { if (n ) { printf("Don't create linked list\n"); exit(0); } list* head = NULL, ...
Java集合框架的核心是几个主要接口,包括Collection、List、Set和Map。Collection是最基础的接口,它是所有集合类的父接口。List和Set接口继承自Collection,分别代表有序可重复元素的集合和无序不重复元素的集合。...
- **希尔排序**:又称为缩小增量排序,是插入排序的一种更高效的改进版本,通过将比较的全部元素分为几个区域来提升效率。 - **快速排序**:采用分治法策略来把一个序列分为较小和较大的两个子序列,然后递归地排序...
- 排序:按照一定的顺序重新排列表中的元素。 - 求线性表的长度:获取表中元素的数量。 ##### 3. 抽象数据类型定义 线性表可以通过抽象数据类型(ADT)来定义: ```plaintext ADT Linear_list { 数据对象:D = {ai |...
实验内容涉及以下几个部分: 1. 创建线性表类:该类的存储结构基于链表实现。链表是一种非连续的存储结构,通过指针链接各个元素。线性表类包含了链表的初始化、插入、删除、查找以及输出等功能。 2. 自表首插入...
根据给定的信息,我们可以提取和解释以下几个重要的数据结构和算法知识点: ### 1. **线性表合并(归并)** #### 算法描述 `MergeList` 函数用于合并两个已排序的线性表 `La` 和 `Lb`,并将结果存储在一个新的...