list排序

comparable接口

时光怂恿深爱的人放手 提交于 2020-01-19 14:21:03
要相对我们自定义的类使用Collections类里面的sort方法进行排序,必须实现comparable接口规定排序规则 要实现public int compareTo(T o)方法 使用如下 import java . util . ArrayList ; import java . util . Collections ; class Student implements Comparable { private String name ; private int ranking ; public Student ( String name , int ranking ) { this . name = name ; this . ranking = ranking ; } public String toString ( ) { return this . name + ":" + this . ranking ; } public int compareTo ( Object o ) { Student s = ( Student ) ( o ) ; return this . ranking - s . ranking ; } } public class Compare2 { public static void f ( ) { ArrayList arr = new

java面试题大全-基础方面

我只是一个虾纸丫 提交于 2020-01-19 03:53:23
Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答

数据结构之排序基础知识笔记

北战南征 提交于 2020-01-18 22:14:17
概述 最近在温习数据结构,现在针对排序算法写一篇随笔,其中附带原理说明和代码。 插入排序 直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次 从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。 假设{20,30,40,10,60,50}中的前3个数已经排列过,是有序的了;接下来对10进行排列。示意图如下: 图中将数列分为有序区和无序区。我们需要做的工作只有两个:(1)取出无序区中的第1个数,并找出它在有序区对应的位置。(2)将无序区的数据插入到有序区;若有必要的话,则对有序区中的相关数据进行移位。 时间复杂度和稳定性 直接插入排序的时间复杂度是O(N2)。 假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1!因此,直接插入排序的时间复杂度是O(N*N)。 直接插入排序是稳定的算法,它满足稳定算法的定义。 算法稳定性 -- 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的。 插入排序JAVA实现 1 import static javaTest.SortUtils

spark shuffle

六月ゝ 毕业季﹏ 提交于 2020-01-18 14:17:15
Spark Shuffle 1. Shuffle相关 当Map 的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。概念上shuffle就是一个沟通数据连接(map和reduce)的桥梁。每个ReduceTask从每个Map Task产生数的据中读取一片数据,极限情况下可能触发M*R个数据拷贝通道(M是MapTask数目,R是Reduce Task数目)。 在Spark1.1 之前,其shuffle只存在一种模式,即hash base。在Spark1.1版本之后加入了sort base。Spark1.1默认采用的shuffle模式还是hash base。在Spark1.2中,sort base将作为默认模式。当然,你可以通过shuffle manager进行配置。 2. Spark shuffle流程 · 首先每一个Mapper 会根据Reducer的数量创建出相应的bucket,bucket的数量是M×R,其中M是Map的个数,R是Reduce的个数。 · 其次Mapper 产生的结果会根据设置的partition算法填充到每个bucket中去。这里的partition算法是可以自定义的

java基础---集合篇

那年仲夏 提交于 2020-01-18 05:05:39
List集合 该添加方法是在集合的指定位置添加元素,指定位置原有元素的位置向后挪了一位(即下标加1): List.add(集合下标,添加元素);(集合实现类: ArrayList () ) 该添加方法是将另外一个集合(参数)的元素添加到集合的结尾处: List.addAll(Collection c ); List集合的底层实现: List集合的子类包括:ArrayList 底层使用的是:数组 注意:实现数组长度可变,指的是重新创建一个新的数组,长度大于旧数组 LinkedList 底层使用:链表结构 特点:每一个元素,前半部分是具体的值,后半部分是地址值 List集合的特点: 元素可重复,不唯一,有序(添加顺序/索引顺序/先后顺序) 集合只能存储对象或引用数据类型,基本数据类型不允许存放在集合当中。 当集合添加基本数据类型的时候,会自动装箱(将基本数据类型转换成引用数据类型)。 引用数据类型可以使用“==”和equals()方法比较,使用equals()方法比较集合元素是否重复。 List集合输出的三种方式: 标准for循环,增强for循环 以及迭代器(重点):(集合中的标准输出方法) System. out .println( "============== 迭代器输出 ===================" ); // 获取迭代器 ----List 集合当中存在一个方法 -

【java】Comparator的用法

你。 提交于 2020-01-17 06:35:47
文章转载自: http://blog.csdn.net/u012250875/article/details/55126531 1.为什么写? comparator 是javase中的接口,位于java.util包下,javase中的所有接口抽象度都很高,有必要重视 网上太多的文章告诉大家comparator是用来排序;确实,可以用来排序,但不仅限于排序 工作中实际需求出现很多需要使用comparator去处理的问题,在此总结一下。 2.接口功能 该接口的功能表示一个比较器,比较器当然具有可比性!那为什么一百度全是说是用来排序的?这是因为数组工具类和集合工具类中提供的工具方法sort方法都给出了含有Comparator接口的重载方法,大家见久了都只想到Comparator接口是用来排序的,按照java抽象的尿性来看,该接口如果为排序而生,我估计应该叫类似Sortable,Sortor之类的名字吧!下面是javase中该接口的使用原型: 1 Arrays.sort(T[],Comparator<? super T> c); 2 Collections.sort(List<T> list,Comparator<? super T> c); 3.使用场景 考虑什么场景使用该接口就需要考虑什么时候需要比较,比较常用的场景: 1. 排序需要比较,需要比较两个对象谁在前谁在后。 2.

C#排序比较

夙愿已清 提交于 2020-01-17 04:44:07
与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序。排序规范如下 IComparable接口(包括IComparable接口和IComparable<T>接口) >和<运算符 当需要实现排序算法时,使用IComparable接口。在下面的例子中,Array.Sort静态方法可以调用,是因为System.String类实现了IComparable接口。 string[] colors={"Green", "Red", "Blue"}; Array.Sort(colors) foreach(string c in colors) Console.Write(c+ " "); 而<和>运算符比较特殊,因为他们一般用于比较数字类型。因为大于和小于运算符会被静态地解析,因此它们“产生”出高效的代码,适用于复杂计算的场景。 .NET Framework还提供了插件式的排序协议--IComparer接口。IComparable接口与IComparer接口的差别类似与IEquatable和IEqualityComparer接口 (关于IEqutable接口和IEqualityComparer接口,请参考C#相等性: http://www.cnblogs.com/yang_sy/p/3582946.html ) 1. IComparable接口

C#对象数组排序方法

南笙酒味 提交于 2020-01-16 14:03:24
一个排序的类,用了几种方式实现的。 using System; namespace DataStruct { public class Sorter { /// <summary> /// 冒泡排序法1 /// </summary> /* (1)对于数组list中的1至n个数据,先将第1个和第2个数据进行比较,然后比较第2个和第3个数据; 依次类推,直到第n-1个数据和第n个数据进行比较交换,这称为一趟冒泡。 这一趟最明显的效果是:将最小的数据传到了第1位。由此还可推断出,对于n个数,一趟应该进行n-1 次比较操作; (2)然后,对2至n个数据进行同样操作,则具有次小值的数据被安置在第2位上。 (3)重复以上过程,每次的移动都向最终排序的目标前进,直至没有数据需要 交换为止。 这种排序的方法被形象地比喻成“冒泡”,在排序过程中,小的数就如气泡一 般逐层上冒,而大的数逐个下沉。 */ /// <param name="list"></param> public static void BubbleSort( int [] list) { for ( int i = 0 ; i < list.Length; i ++ ) { for ( int j = 0 ; j < list.Length - i - 1 ; j ++ ) // 一趟排序开始 // 也可以使用for (int j =

排序二 快速排序

孤者浪人 提交于 2020-01-16 11:31:44
目录 要点 算法分析   快速排序算法的性能   时间复杂度   空间复杂度   算法稳定性 完整参考代码   JAVA版本 参考资料 相关阅读 要点 快速排序是一种 交换排序 。 快速排序由C. A. R. Hoare在1962年提出。 它的基本思想是:通过一趟排序将要排序的数据 分割 成独立的两部分: 分割点左边都是比它小的数,右边都是比它大的数 。 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 详细的图解往往比大堆的文字更有说明力,所以直接上图: 上图中,演示了快速排序的处理过程: 初始状态 为一组无序的数组:2、4、5、1、3。 经过以上操作步骤后,完成了 第一次的排序 ,得到新的数组:1、2、5、4、3。 新的数组中,以2为分割点,左边都是比2小的数,右边都是比2大的数。 因为2已经在数组中找到了合适的位置,所以不用再动。 2左边的数组只有一个元素1,所以显然不用再排序,位置也被确定。(注:这种情况时,left指针和right指针显然是重合的。因此在代码中,我们可以通过设置判定条件 left 必须小于right ,如果不满足,则不用排序了 )。 而对于2右边的数组5、4、3,设置left指向5,right指向3,开始继续 重复图中的一、二、三、四步骤 ,对新的数组进行排序。 核心代码 public int

排序一 冒泡排序

泪湿孤枕 提交于 2020-01-16 11:10:04
目录 要点   算法思想 算法分析   冒泡排序算法的性能   时间复杂度   算法稳定性 优化 完整参考代码   JAVA版本 参考资料 相关阅读 要点 冒泡排序是一种 交换排序 。 什么是交换排序呢? 交换排序 :两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 算法思想 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名。 假设有一个大小为 N 的无序序列。冒泡排序就是要 每趟排序过程中通过两两比较,找到第 i 个小(大)的元素,将其往上排 。 图 - 冒泡排序示例图 以上图为例,演示一下冒泡排序的实际流程: 假设有一个无序序列 { 4. 3. 1. 2, 5 } 第一趟排序:通过两两比较,找到第一小的数值 1 ,将其放在序列的第一位。 第二趟排序:通过两两比较,找到第二小的数值 2 ,将其放在序列的第二位。 第三趟排序:通过两两比较,找到第三小的数值 3 ,将其放在序列的第三位。 至此,所有元素已经有序,排序结束。 要将以上流程转化为代码,我们需要像机器一样去思考,不然编译器可看不懂。 假设要对一个大小为 N 的无序序列进行升序排序(即从小到大)。 (1)