list排序

Java中Map存储结构根据值排序(sort by values)

♀尐吖头ヾ 提交于 2019-12-26 17:34:54
需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 相同的value对应key 是不一样的,所以需要采用不一样的方式。 详解:Map<key, value> 的目的是用来快速访问的存储结构。 通用的方法: import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.*; public class MapUtil { public void MapUtil() { } public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) { List<Entry<K, V>> list = new ArrayList<>(map.entrySet()); list.sort(Entry.comparingByValue()); Map<K, V> result = new LinkedHashMap<>();

java中set接口的用法

早过忘川 提交于 2019-12-26 15:27:08
java中的set接口有如下的特点: 不允许出现重复元素; 集合中的元素位置无顺序; 有且只有一个值为null的元素。 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特性为: 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。 空集的性质:空集是一切集合的子集 Set不保存重复的元素。Set中最常被使用的是测试归属性,你可以很容易的询问某个对象是否在某个Set中。Set具有与Collection完全一样的接口,因此没有任何额外的功能。实际上Set就是Collection,只是行为不同。   实现了Set接口的主要有HashSet、TreeSet、LinkedHashSet这几个共同点就是每个相同的项只保存一份。他们也有不同点,区别如下:   1.HashSet:   HashSet使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。会根据hashcode和equals来庞端是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。 package

Java基础之集合框架

元气小坏坏 提交于 2019-12-26 09:49:15
java集合架构支持3种类型的集合:规则集(Set),线性表(List),和图(Map),分别定义在Set,List,Map中。 Set实例存储一组互不相同的元素(集合),List实例存储一组顺序排列的元素(表),Map存储一组 对象---关键值的映射 集合中存储的是Java对象的引用,是一个引用的集合,这个引用指向相应的对象空间 ,而不是集合本身存储的对象 集合中不可以存储基本数据类型值,基本数据类型也可以装入集合,但其内部是先自动装箱成包装类对象,再存入集合 总的架构如下,非常重要,包含继承关系,实现的分类,一目了然:集合分为Map 接口和Collection接口 ,这两个接口是Java集合框架的根接口 Collection接口:         Set接口:不可重复 没有索引             HashSet具体类 : 使用哈希算法去重复, 效率高, 但元素无序             LinkedHashSet具体类 : HashSet的子类, 原理相同, 除了去重复之外还能保留存储顺序             TreeSet具体类 :使用二叉树算法排序, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列        List接口: 可重复, 有存储顺序(有索引),存和取有序             ArrayList具体类 :数组实现, 增删慢, 查找快

Java集合List、Set、Map

╄→尐↘猪︶ㄣ 提交于 2019-12-25 17:57:39
集合是 java 基础中非常重要的一部分,同样也是 Java 面试中很重要的一个知识点。所以,给王小整理了这篇关于集合的文章。 1、接口继承关系以及实现 集合类存放于 Java.util 包中,主要有 3 种:set、list 和 map。 Collection:Collection 是集合 List、Set、Queue 的最基本的接口 Iterator:迭代器,可以通过迭代器遍历集合中的数据 Map:是映射表的基础接口 层次关系图: 2、List Java 的 List 是非常常用的数据类型。List 是有序的 Collection。Java List 一共三个实现类:分别是 ArrayList、Vector 和 LinkedList。 2.1、ArrayList ArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。 2.2、Vector Vector 与 ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写 Vector

Java_集合面试题

亡梦爱人 提交于 2019-12-25 06:07:07
Java_集合面试题 0.链表,队列和栈的区别? 链表是一种存储结构,指得是存储时候除了要存储数据元素之外,还要用数据元素一起的另外空间存储数据元素的关系。 队列和栈都是线性表,属于逻辑结构范畴,都是访问点受到限制,并且限制在线性表端点的线性表。 栈被限定为在线性表中的同一个(唯一一个的)端点插入删除 队列被限定为在线性表的一端插入,另外一个端点删除 栈和队列也可以用链表来实现,分别称为链栈和链队列 1. ArrayList ArrayList是基于数组实现的,最大长度不会超过数组的长度2147483647(最大值是int的最大值是,2的31次方减去1 ).如果业务中可能存在超过这个长度的数据,使用LinkedArrayList 3.HashMap Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。 HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。 4.HashMap和HashTable的区别

字符串的排序

大城市里の小女人 提交于 2019-12-24 14:10:10
剑指 offer 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 思路: 看完剑指 offer 才知道,觉得主要是回溯法。递归。 两步: 求第一个位置上所有可能出现的字符,即将第一个字符和后面的字符交换 固定第一个字符,求后面字符的排序,然后把后面字符分成两部分,后面字符的第一个字符,以及这个字符后面的所有字符。 import java.util.ArrayList; import java.util.Collections; public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> list=new ArrayList<>(); if(str == null||str.length()==0){ return list; } change(list,str,0); //按字符串排序 Collections.sort(list); return list; } public void change(ArrayList<String> list,String str,int index){ if(str.length()

Java借助反射实现自定义对象List的排序

ⅰ亾dé卋堺 提交于 2019-12-24 11:28:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 众所周知,java里List集合类提供了sort()的方法,方便懒人对list对象进行排序, 但是,其要直接使用sort方法,前提是集合中存放的是可直接排序的基本类型,如List<int>, List<double>等,如果 我们定义了一个自定义类型 Class User,并创建一个自定义类型的集合如List<User>, 那么无参的sort()方法就不可用了,因为不知道如何排序了。这时就需要Comparator。 Comparator接口里的compare(T o1, T o2)方法中可以定义这两个对象怎样比较,怎样决定谁排在谁前面。因为项目需要写了个List工具类,可以通过指定的属性名,对List<T>类型的对象进行排序,具体代码如下: import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import com.ucs.dto.user.UrUser; public class ListUtils { /** * 根据对象属性名,对对象List进行排序 * @description

java 对list进行排序

人盡茶涼 提交于 2019-12-23 13:53:45
前提: list中的元素是自定义对象,如何根据对象的元素进行排序呢? 比如List<Student>students 是一个list,每个元素都是Student对象,Student对象中有成员变量name,age,等, 那么我想根据age来排序,如何实现呢? 1,使用Comparator 接口 Student类 结构如下:( 省略getter,setter方法 ) public class Student { /*** * 姓名 */ private String name; private int age; private String address; /*** * 考试得分 */ private int score; //省略getter,setter方法 @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", score=" + score + "]"; } } 测试方法: @Test public void test_ListComparator(){ List<Student>students=new ArrayList<Student>(); Student stu=null; stu=new Student(); stu.setName(

----------------------集合-------------------------

做~自己de王妃 提交于 2019-12-23 11:44:30
1:集合:存储对象 遍历取出对象 List<要存储元素的数据类型> 变量名 = new ArrayList<要存储元素的数据类型>(); 必须要引用数据类型,不能是基本类型,除非把基本数据类型变成包装类 b:集合 * b1:集合的层次结构 * Iterable <E> 实现了Iterable接口的集合类才可以被foreach * Collection 接口 集合最顶层的接口 * List 接口特点: 有序 有索引 可以重复元素 元素存与取的顺序相同 泛型用来约束集合中可有存储的数据类型 * ArrayList 底层是数组 根据索引查询,增删慢 ArrayList是实现了基于动态数组的数据结构 寻址容易,插入和删除困难; * LinkedList 底层是链表 增删快 查询慢 LinkedList是基于链表的数据结构 寻址困难,插入和删除容易。 子类特有的功能,不能多态调用 * Stack 栈结构的集合 stack继承vector其底层用的还是数组存储方式 Stack 栈结构的集合 官方建议:使用栈尽量使用ArrayDeque: Deque 接口及其实现提供了 LIFO 堆栈操作的更完整和更一致的 set,应该优先使用此 set,而非此类。例如: Deque stack = new ArrayDeque(); * Vector 线程安全的线性集合 *

Java中常见数据结构:list与map

北慕城南 提交于 2019-12-23 07:56:55
1 1:集合 2 Collection(单列集合) 3 List(有序,可重复) 4 ArrayList 5 底层数据结构是数组,查询快,增删慢 6 线程不安全,效率高 7 Vector 8 底层数据结构是数组,查询快,增删慢 9 线程安全,效率低 10 LinkedList 11 底层数据结构是链表,查询慢,增删快 12 线程不安全,效率高 13 Set(无序,唯一) 14 HashSet 15 底层数据结构是哈希表。 16 哈希表依赖两个方法:hashCode()和equals() 17 执行顺序: 18 首先判断hashCode()值是否相同 19 是:继续执行equals(),看其返回值 20 是true:说明元素重复,不添加 21 是false:就直接添加到集合 22 否:就直接添加到集合 23 最终: 24 自动生成hashCode()和equals()即可 25 26 LinkedHashSet 27 底层数据结构由链表和哈希表组成。 28 由链表保证元素有序。 29 由哈希表保证元素唯一。 30 TreeSet 31 底层数据结构是红黑树。(是一种自平衡的二叉树) 32 如何保证元素唯一性呢? 33 根据比较的返回值是否是0来决定 34 如何保证元素的排序呢? 35 两种方式 36 自然排序(元素具备比较性) 37 让元素所属的类实现Comparable接口 38