list排序

Java实现List自定义排序

倾然丶 夕夏残阳落幕 提交于 2019-12-05 13:47:54
废话不多说,直接上代码 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class User { public static void main(String[] args) { List<User> list = new ArrayList<>(); list.add(new User("张三",18)); list.add(new User("诸葛亮",69)); list.add(new User("孙悟空",500)); list.add(new User("周杰伦",45)); list.add(new User("郭德纲",60)); list.add(new User("秦始皇",5000)); System.out.println("排序前:"); System.out.println(list); Collections.sort(list, new Comparator<User>() { @Override public int compare(User o1, User o2) { int age1 = o1.getAge(); int age2 = o2.getAge();

深入浅出的分析 Set集合

旧街凉风 提交于 2019-12-05 11:32:26
01. 摘要 Set集合的特点主要有:元素不重复、存储无序的特点。 打开 Set 集合,主要实现类有 HashSet、LinkedHashSet 、TreeSet 、EnumSet( RegularEnumSet、JumboEnumSet )等等,总结 Set 接口实现类,图如下: 由图中的继承关系,可以知道,Set 接口主要实现类有 AbstractSet、HashSet、LinkedHashSet 、TreeSet 、EnumSet( RegularEnumSet、JumboEnumSet ),其中 AbstractSet、EnumSet 属于抽象类,EnumSet 是在 jdk1.5 中新增的,不同的是 EnumSet 集合元素必须是枚举类型。 HashSet 是一个输入输出无序的集合,集合中的元素基于 HashMap 的 key 实现,元素不可重复; LinkedHashSet 是一个输入输出有序的集合,集合中的元素基于 LinkedHashMap 的 key 实现,元素也不可重复; TreeSet 是一个排序的集合,集合中的元素基于 TreeMap 的 key 实现,同样元素不可重复; EnumSet 是一个与枚举类型一起使用的专用 Set 集合,其中 RegularEnumSet 和 JumboEnumSet 不能单独实例化,只能由 EnumSet 来生成

排序

纵然是瞬间 提交于 2019-12-05 09:03:36
排序算法: 常用的排序算法有:快排、归并、堆排序。 该中题型只要是利用排序来解题。 Kth Element 问题,也就是第K个元素的问题。 快速选择 用于求解 Kth Element 问题,也就是第 K 个元素的问题。 可以使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N 2 )。 堆 用于求解 TopK Elements 问题,也就是 K 个最小元素的问题。可以维护一个大小为 K 的最小堆,最小堆中的元素就是最小元素。最小堆需要使用大顶堆来实现,大顶堆表示堆顶元素是堆中最大元素。这是因为我们要得到 k 个最小的元素,因此当遍历到一个新的元素时,需要知道这个新元素是否比堆中最大的元素更小,更小的话就把堆中最大元素去除,并将新元素添加到堆中。所以我们需要很容易得到最大元素并移除最大元素,大顶堆就能很好满足这个要求。 堆也可以用于求解 Kth Element 问题,得到了大小为 k 的最小堆之后,因为使用了大顶堆来实现,因此堆顶元素就是第 k 大的元素。 快速选择也可以求解 TopK Elements 问题,因为找到 Kth Element 之后,再遍历一次数组,所有小于等于 Kth Element 的元素都是 TopK Elements。 可以看到,快速选择和堆排序都可以求解 Kth Element 和 TopK Elements

排序

梦想的初衷 提交于 2019-12-05 08:34:15
排序算法: 常用的排序算法有:快排、归并、堆排序。 该中题型只要是利用排序来解题。 Kth Element 问题,也就是第K个元素的问题。 快速选择 用于求解 Kth Element 问题,也就是第 K 个元素的问题。 可以使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N 2 )。 堆 用于求解 TopK Elements 问题,也就是 K 个最小元素的问题。可以维护一个大小为 K 的最小堆,最小堆中的元素就是最小元素。最小堆需要使用大顶堆来实现,大顶堆表示堆顶元素是堆中最大元素。这是因为我们要得到 k 个最小的元素,因此当遍历到一个新的元素时,需要知道这个新元素是否比堆中最大的元素更小,更小的话就把堆中最大元素去除,并将新元素添加到堆中。所以我们需要很容易得到最大元素并移除最大元素,大顶堆就能很好满足这个要求。 堆也可以用于求解 Kth Element 问题,得到了大小为 k 的最小堆之后,因为使用了大顶堆来实现,因此堆顶元素就是第 k 大的元素。 快速选择也可以求解 TopK Elements 问题,因为找到 Kth Element 之后,再遍历一次数组,所有小于等于 Kth Element 的元素都是 TopK Elements。 可以看到,快速选择和堆排序都可以求解 Kth Element 和 TopK Elements

经典排序算法

随声附和 提交于 2019-12-05 08:34:10
  排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序。 O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序。 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 名词解释: n:数据规模 k:“桶”的个数 In-place:占用常数内存,不占用额外内存 Out-place:占用额外内存 稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同 冒泡排序   冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

数据结构与算法之美学习笔记:第十四讲

我只是一个虾纸丫 提交于 2019-12-05 00:30:27
一、课前问题 几乎所有的编程语言都会提供排序函数,比如C语言中qsort(),C++ STL中的sort()、stable_sort(),还有Java语言中的Collections.sort()。 在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都利用了哪种排序算法呢? 基于这些问题,今天我们就来看排序这部分的最后一块内容:如何实现一个通用的、高性能的排序函数? 二、如何选择合适的排序算法 如果要实现一个通用的、高效率的排序函数,我们应该选择哪种排序算法?我们先回顾一下前面讲过的一种排序算法。 我们前面讲过,线性排序算法的时间复杂度比较低,适用场景比较特殊。所以如果要写一个通用的排序函数,不能选择线性排序算法。 如果对小规模数据进行排序,可以选择时间复杂度是O(n )的算法; 如果对大规模数据进⾏排序,时间复杂度是O(nlogn)的算法更加高效。 所以,为了兼顾任意规模数据的排序,一般都会首选时间复杂度是O(nlogn)的排序算法来实现排序函数。 时间复杂度是O(nlogn)的排序算法不止一个,我们已经讲过的有归并排序、快速排序,后面讲堆的时候我们还会讲到堆排序。堆排序和快速排序都有比较多的应用,比如Java语言采用堆排序实现排序函数,C语言使用快速排序实现排序函数。 不知道你有没有发现,

List容器排序方法的使用

北城以北 提交于 2019-12-04 21:45:31
今天在做任务的时候需要对已经存到list容器里的对象数组进行排序,需要根据 其中的一个属性进行排序,最初是根据一个利用冒泡排序的算法进行处理的后来上网查了一下对于list容器进行排序时有自带的方法。所以对这个方法进行总结。 Collections.sort(list, new Comparator<List里存放的类名>() { @Override public int compare(类名t1, 类名t2) { //根据其中的属性进行升序排序 ,如果需要降序的话讲其中的 > 改为 < 即可 if (t1.get方法名()) > t2.get方法名()) { return 1; } if (t1.get方法名()) == t2.get方法名()) { return 0; } return -1; } }); 来源: https://www.cnblogs.com/1gaoyu/p/11885752.html

C# 列排序

偶尔善良 提交于 2019-12-04 21:04:54
private void button2_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("AAA", typeof(string));//0 dt.Columns.Add("BBB", typeof(string));//1 dt.Columns.Add("CCC", typeof(string));//2 dt.Columns.Add("DDD", typeof(string));//3 dt.Columns.Add("EEE", typeof(string)); //4 dt.Columns.Add("FFF", typeof(string));//5 dt.Columns.Add("GGG", typeof(string));//6 dt.Columns.Add("HHH", typeof(string));//7 DataRow dr = dt.NewRow(); dr["AAA"] = "000"; dr["BBB"] = "111"; dr["CCC"] = "222"; dr["DDD"] = "333"; dr["EEE"] = "444"; dr["FFF"] = "555"; dr["GGG"] = "666"; dr["HHH"] =

十大经典排序算法(动图演示)(转载)

此生再无相见时 提交于 2019-12-04 19:49:14
0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1

大数据之路week02 Collection 集合体系收尾(Set)

[亡魂溺海] 提交于 2019-12-04 19:01:59
1、Set集合(理解)   (1)Set集合的特点     无序,唯一。   (2)HashSet集合(掌握)     A: 底层数据结构是哈希表(是一个元素为链表的数组)     B: 哈希表底层依赖两个方法: hashCode() 和 equals()       执行顺序:         首先比较哈希值是否相同           相同:继续执行equals()方法             返回true:元素重复了,不添加             返回false:直接把元素添加到集合           不同:就直接把元素添加到集合 1、人的类 1 package com.wyh.hashSet; 2 3 /** 4 * @author WYH 5 * @version 2019年11月17日 上午9:21:02 6 */ 7 public class Person { 8 private String name; 9 private int age; 10 11 public Person(String name, int age) { 12 super(); 13 this.name = name; 14 this.age = age; 15 } 16 public Person() { 17 super(); 18 // TODO Auto-generated