treemap

在工作中常用到的Java集合类有哪些?

倖福魔咒の 提交于 2020-03-26 13:52:29
3 月,跳不动了?>>> 前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star : https://github.com/ZhongFuCheng3y/3y Java集合是我认为在Java基础中最最重要的知识点了,Java集合是必须掌握的。我在实习/秋招面试的时候, 只要是面到Java,那一定是少不了Java集合 。 作为一个新人,最关心的其实有一点: 这个技术在工作中是怎么用的 。换个说法:“工作中常用到的Java集合有哪些,应用场景是什么” 如何入门Java集合以及每个常用的子类我在 PDF 整理好了,这就不粘贴过来了,有需要的就在PDF查看就好了。这份PDF 绝对令你满意 。 List集合 List集合下最常见的集合类有两个: ArrayList和LinkedList 在工作中,我都是无脑用 ArrayList 。我问了两个同事:“你们在项目中用过LinkedList吗?”他们都表示没有。 众所周知,ArrayList底层是数组,LinkedList底层是链表。数组遍历速度快,LinkedList增删元素快。 为什么在工作中一般就用ArrayList,而不用LinkedList呢?原因也很简单: 在工作中, 遍历的需求比增删多 ,即便是增加元素往往也只是从尾部插入元素,而ArrayList在尾部插入元素也是O(1) ArrayList增删没有想象中慢

TreeMap实现原理

冷暖自知 提交于 2020-03-23 19:57:56
3 月,跳不动了?>>> 在用TreeMap之前我们要对TreeMap有个整体的认识。 1、TreeMap介绍 TreeMap是一个通过红黑树实现有序的key-value集合。 TreeMap继承AbstractMap,也即实现了Map,它是一个Map集合 TreeMap实现了NavigableMap接口,它支持一系列的导航方法, TreeMap实现了Cloneable接口,它可以被克隆 TreeMap introduction:A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. This implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations. Algorithms are adaptations of those in Cormen, Leiserson, and

TreeMap实现原理

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-23 19:42:56
3 月,跳不动了?>>> 在用TreeMap之前我们要对TreeMap有个整体的认识。 1、TreeMap介绍 TreeMap是一个通过红黑树实现有序的key-value集合。 TreeMap继承AbstractMap,也即实现了Map,它是一个Map集合 TreeMap实现了NavigableMap接口,它支持一系列的导航方法, TreeMap实现了Cloneable接口,它可以被克隆 TreeMap introduction:A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. This implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations. Algorithms are adaptations of those in Cormen, Leiserson, and

Java 中的 Collection 学习笔记(1)

最后都变了- 提交于 2020-03-20 22:28:14
3 月,跳不动了?>>> Collection 来自与java.util包,是java中数据结构的封装的包。 collection主要方法: boolean add(Object o)添加对象到集合 boolean remove(Object o)删除指定的对象 int size()返回当前集合中元素的数量 boolean contains(Object o)查找集合中是否有指定的对象 boolean isEmpty()判断集合是否为空 Iterator iterator()返回一个迭代器 boolean containsAll(Collection c)查找集合中是否有集合c中的元素 boolean addAll(Collection c)将集合c中所有的元素添加给该集合 void clear()删除集合中所有元素 void removeAll(Collection c)从集合中删除c集合中也有的元素 void retainAll(Collection c)从集合中删除集合c中不包含的元素 大致讲解java集合的体系结构 List、Set、Map是这个集合体系中最主要的三个接口。 其中List和Set继承自Collection接口。 Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。 List有序且允许元素重复。ArrayList

Java集合框架入门

笑着哭i 提交于 2020-03-13 13:33:06
Java集合框架 话不多说直接上图,以下小结一下一些集合类的特性,具体方法先行略过。 Collection接口 Collection接口是最最基础的接口,所有实现Collection接口的类都必须提供两个构造函数:1.默认的无参构造方法,2.以Collection接口为参数的,能够方便使用者复制Collection的构造方法。 遍历Collection中的每一个元素时,要用到iterator()方法,这个方法返回一个迭代器,特别注意 通过Iterator遍历本身是无序的 ,要看它的实现类是否能够保证遍历的有序与否。 //常用的用法 Iterator it = Collection.iterator(); //得到迭代器 while(it.hasNext()){ //如果集合中有下一个元素的话 Object obj = it.next(); //得到下一个元素 } Set接口 Set是一种不包含重复元素的Collection,元素是否重复通过equals方法来判断。利用这种特性,我们想要去重时可以把元素都塞进一个Set接口的实现类,出来就是没有重复的了。 所以用这个set的实现类时,特别要小心存入元素的equals()方法,equals()方法使用不当可能会导致Set()吞掉一些元素。 Map接口 Map提供key到value的映射,一个Map中不能包含相同的key

TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

非 Y 不嫁゛ 提交于 2020-03-13 00:04:25
TreeSet要求存放的 对象所属的类 必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小。 2. TreeMap 要求存放的 键值对映射的键 必须实现 Comparable 接口从而根据键对元素进行排序。 Collections 工具类的 sort 方法有两种重载的形式: 1. 第一种要求传入的待排序容器中存放的对象比较实现 Comparable 接口以实现元素的比较; 2. 第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是 Comparator 接口的子类型(需要重写 compare方法实现元素的比较),相当于一个临时定义的排序规则。( Collections . sort ( list, new Comparator<> () { public int compare (Object o1 , Object o2 ) { })) 来源: oschina 链接: https://my.oschina.net/u/4143249/blog/3192951

HashMap详解

谁都会走 提交于 2020-03-08 23:11:12
HashMap详解 - 数据结构(对元素增删查改) HashMap详解 - 数据结构(对数据增删查改) 1、HashMap 2、HashMap源码解读 3、HashMap 的长度为什么是2的幂次方 4、如何选用集合 1、HashMap JDK1.8之前 JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突) 所谓 扰动函数 指的就是 HashMap 的 hash 方法。使用 hash 方法也就是扰动函数是为了防止一些实现比较差的 hashCode() 方法 换句话说使用扰动函数之后可以减少碰撞。 所谓 “拉链法” 就是:将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可 JDK1.8 jdk1.8在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。 2、HashMap源码解读 如何读源码: 根据原理(HashMap 数组+链表):列出问题,然后把问题解决(数组如何初始化,如何扩容,节点存放依据?) 入口方法, 构造方法 初始化(有四个构造方法): // 指定容器大小和加载因子 public HashMap(int initialCapacity, float loadFactor) {

HashMap源码,问map源码问题?以及LinkedHashMap,TreeMap不同

穿精又带淫゛_ 提交于 2020-03-08 11:08:12
HashMap 中的 put 方法 。put 时先判断是否为空,不为空就计算 hash 值,再使用 indexFor()方法计算数组下标。该方法仅有一条语句:h & (length - 1),这除了取模提高运算效率之外,还会使数据均匀分布在table数组上,充分利用空间。 LinkedHashMap 可以认为是 HashMap + LinkedList。即使用 HashMap 操作数据结构,又使用 LinkedList 维护插入元素的先后顺序。 LinkedHashMap 继承自 HashMap。(LinkedHashMap 相比于 HashMap 还额外保证了遍历顺序,解决了 HashMap 的无序问题。) 如果额外要保证 统计性能 或者 对 Key 按照一定规则排序 ,那么可以使用 TreeMap。TreeMap 为 CRUD 操作提供了 logN 的时间开销。相比于 HashMap 和 LinkedHashMap,从存储性能来说,TreeMap要差些;但从统计性能上,TreeMap logN的时间开销就好上不少。 来源: oschina 链接: https://my.oschina.net/u/4141148/blog/3068288

大数据教程(9.1)流量汇总排序的mr实现

给你一囗甜甜゛ 提交于 2020-03-04 11:17:17
上一章我们有讲到一个mapreduce案例——移动流量排序,如果我们要将最后的输出结果按总流量大小逆序输出,该怎么实现呢?本节博主将分享这个实现的过程。 一、分析 首先,要实现这个功能,我们可能会想到是否有办法将输出的结果先缓存起来,等执行完成后,在排序一起次性全部输出。是的,这的确是一个可以实现的思路; 我们可以启动一个reduce来处理,在reduce阶段中reduce()方法每次执行时,将key和value缓存到一个TreeMap里面,并且不执行输出;当reduce全部切片处理完成后,会调用一个cleanup()方法,且这个方法仅会被调用一次,我们可以在这个方法里面做排序输出。 上面的这种方式确实是可以实现,当是并不是很优雅;我们可以利用mapreduce自身的map阶段输出key的特性来实现,这个特性就是所有的key会按照key类comparable方法实现的实现去做排序输出。详细过程,我们可以将整个需求分成两个mapreduce过程来执行,第一个mapreduce就和之前的博客中一样只做统计流量,第二个mapreduce我们就用key的特性去实现排序。 二、实现方案(key特性实现方式) FlowBean(流量统计bean类) package com.empire.hadoop.mr.flowsort; import java.io.DataInput; import

Java面试全解析(14)集合详解之 Map

主宰稳场 提交于 2020-03-03 14:58:54
集合有两个大接口:Collection 和 Map,本文重点来讲解集合中另一个常用的集合类型 Map。 以下是 Map 的继承关系图: Map 简介 Map 常用的实现类如下: Hashtable :Java 早期提供的一个哈希表实现,它是线程安全的,不支持 null 键和值,因为它的性能不如 ConcurrentHashMap,所以很少被推荐使用。 HashMap :最常用的哈希表实现,如果程序中没有多线程的需求,HashMap 是一个很好的选择,支持 null 键和值,如果在多线程中可用 ConcurrentHashMap 替代。 TreeMap :基于红黑树的一种提供顺序访问的 Map,自身实现了 key 的自然排序,也可以指定 Comparator 来自定义排序。 LinkedHashMap :HashMap 的一个子类,保存了记录的插入顺序,可在遍历时保持与插入一样的顺序。 Map 常用方法 常用方法包括:put、remove、get、size 等,所有方法如下图: 使用示例,请参考以下代码: Map hashMap = new HashMap(); // 增加元素 hashMap.put( "name" , "老王" ); hashMap.put( "age" , "30" ); hashMap.put( "sex" , "你猜" ); // 删除元素 hashMap.