treemap

Java基础理解 之 HashMap

喜欢而已 提交于 2020-08-04 16:32:00
1. Q:HashMap 实现原理 A:利用key的hashCode计算出数组的下标。存储时会出现两种情况,也就是key值相同与不相同,相同的情况下会覆盖原数据,不同时则在计算好的hashcode下标位置把值放到链表中。获取则是通过hashCode的下标,再进一步判断key是否相同,从而在链表中找到对应的值。当存储超过现有容量则扩容,可以把每个空间理解为桶,桶越多执行效率越快,以空间换时间。 源码解读: static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 static final int MAXIMUM_CAPACITY = 1 << 30; //最大容量 static final float DEFAULT_LOAD_FACTOR = 0.75f; //填充比 static final int TREEIFY_THRESHOLD = 8; //当add一个元素到某个桶,其链表长度达到8时将链表转换为红黑树 static final int UNTREEIFY_THRESHOLD = 6; static final int MIN_TREEIFY_CAPACITY = 64; transient Node<k,v>[] table; //存储元素的数组 transient Set<map.entry<k,v>>

Java集合系列(一):集合的定义及分类

大兔子大兔子 提交于 2020-07-27 11:01:35
1. 集合的定义 什么是集合呢? 定义:集合是一个存放对象的引用的容器。 在Java中,集合位于java.util包下。 2. 集合和数组的区别(面试常问) 提到容器,就会想起数组,那么 集合和数组的区别是什么呢? (这里是重点,面试可能问的比较多) 数组和集合都是Java中的容器 数组的长度是固定的,集合的长度是可变的 数组只能存储相同数据类型的数据,这里的数据类型可以是基本数据类型,也可以是引用类型 集合可以存储不同数据类型的对象的引用(但一般情况下,我们会使用泛型来约定只使用1种数据类型),但不能存储基本数据类型 空口无凭,我们来点代码配合理解,首先,我们看下如下的数组代码: String[] platformArray = new String[3]; platformArray[0] = "博客园"; platformArray[1] = "掘金"; platformArray[2] = "微信公众号"; platformArray[3] = "个人博客"; 运行代码就会发现, platformArray[3] = "个人博客"; 会引发 java.lang.ArrayIndexOutOfBoundsException 异常。 而使用集合时就不存在这个问题,因为集合在声明时不需要指定长度并且长度会根据放入元素的多少而变化: List<String>

StackOverflow 上面最流行的 7 个 Java 问题!| 值得一看

六眼飞鱼酱① 提交于 2020-07-26 04:50:46
StackOverflow发展到目前,已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西。 这篇文章是在我们审阅了StackOverflow上最流行的Java问题以及答案后从中挑出来的。即使你是一个有丰富经验的开发者,也能从中学到不少东西。 一、分支预测 问题链接: https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array StackOverflow上最多投票的一个Java问题是:为什么处理一个排序数组要比非排序数组快的多。 为了回答这个问题,你需要使用分支预测(branch prediction)。分支预测是一种架构,旨在通过在真实的路径发生前猜测某一分支的下一步来提升处理过程。 分支在这里即一个if语句。这样的话,如果是一个排序数组,那么分支预测将会进行,否则不会进行。 StackOverflow上的一个回答者,链接: http://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array

一篇吃透,Java集合框架综述

不打扰是莪最后的温柔 提交于 2020-07-25 03:48:44
一、集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1、所有集合类都位于 java.util 包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。 2、集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。 3、抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。 4、实现类:8个实现类(实线表示),对接口的具体实现。 5、Collection 接口是一组允许重复的对象。 6、Set 接口继承 Collection,集合元素不重复。 7、List 接口继承 Collection,允许重复,维护元素插入顺序。 8、Map接口是键-值对象,与Collection接口没有什么关系。 9、Set、List和Map可以看做集合的三大类: List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。 Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)。 Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。 二、总体分析 大致说明: 看上面的框架图,先抓住它的主干

Java学习笔记 | 集合类

泪湿孤枕 提交于 2020-07-25 00:55:21
概述 集合是Java中很重要的部分,在Java.util包提供了一些集合类,集合类又被称为容器。提到容器,大家很容易想起数组。集合类和数组的不同之处在于: 数组长度:固定 集合类长度:可变 数组存放基本类型的数据 集合类存放对象的引用 常用的集合有:Set集合、Map集合、List集合。 List和Set继承了Collection接口,各接口提供了不同的实现类。 Collection接口 其中提供了添加元素、删除元素、管理数据的方法,List和Set都继承了Collection接口,所以这些方法对List集合和Set集合通用。 常用方法有: add(E e) remove(Object o) isEmpty() iterator() size() List集合 List集合包括:List接口以及List接口的所有实现类。可以通过索引来访问集合中的元素。 List接口除了包含Collection中的所有方法外还有两个方法: get(int index):获得指定索引位置的元素 set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象 List接口常用实现类: ArrayList类 LinkedList类 Set集合 Set接口常用实现类: HashSet类 TreeSet类 Map集合 Map接口常用实现类: HashMap类 TreeMap类

聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路

岁酱吖の 提交于 2020-07-24 08:45:16
引言         很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想说,这位同学你站出来,保证不打死你,-_-),原文章名称叫做 《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》 ,首发于笔者的博客园博客,这里也郑重声明一下,所有内容类似文章均属转载或抄袭。      之前看过的朋友可能会有疑问,为什么要再次捡起这篇文章,还把称谓改成了笔者这么高端的词汇。      简单的解释一下,原因有三个,第一个原因,是说不得的原因,请各位看官自行YY。第二个原因,是两年过去了,笔者在阿里也呆了700+天的时间,所以对这篇文章,又有了一些新的理解和想法,想回过头来,再完善一下。最后一个原因,是因为最近笔者经常刷某音,根据玩某音的经验,发两次会火,哈哈,-_-。      所以,这篇文章,可以说是之前那篇文章的进阶版,为了方便大家观看,本文会引入很多原文章的内容,避免没看过上一篇文章的同学,还需要回过头去翻看。(好吧,我承认是为了偷懒,-_-) 阿里社招面试都问什么?            和之前一样,文章一上来,我们先来谈谈阿里的社招面试都问什么,其实这个话题并不是什么秘密,所有来阿里面试过的同学,都能回答一二。   两年前的时候,笔者在文章里是这么回答的。   这个是让LZ最头疼的一个问题

Java集合之Map接口及其实现类

て烟熏妆下的殇ゞ 提交于 2020-07-23 19:25:04
目录 一、Map接口 二、HashMap 三、LinkedHashMap 四、TreeMap 五、HashTable 六、WeakHashMap 七、EnumMap 一、Map接口 Map提供了一种映射关系,其中的元素是以 键值对(key-value) 的形式存储的,能够实现根据key快速查找value; Map中的键值对以 Entry类型 的对象实例形式存在; 键(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值。 Map支持泛型,形式如: Map<K,V> Map中使用put(K key,V value)方法添加Map接口中定义的常用方法 具体使用在实现类中讨论 int size ( ) ; //获取Map集合大小(即元素数量) boolean isEmpty ( ) ; //判断是否为空 boolean containsKey ( Object key ) ; //判断是否包含某个键 boolean containsValue ( Object value ) ; //判断是否包含某个值 V get ( Object key ) ; //获取某个键对应的值 V put ( K key , V value ) ; //添加键值对(K,V) V remove ( Object key ) ; /

How to write a custom Comparator for TreeMap in Java?

大城市里の小女人 提交于 2020-06-29 08:21:25
问题 I want to store key-value pairs in TreeMap and sort the entries based on the value of Key as per following logic: Sort by the length of the key. If the length of two keys is same then sort them alphabetically. Example, for the following key-value pairs. IBARAKI MitoCity TOCHIGI UtunomiyaCity GUNMA MaehashiCity SAITAMA SaitamaCity CHIBA ChibaCity TOKYO Sinjyuku KANAGAWA YokohamaCity The expected output is like this. CHIBA : ChibaCity GUNMA : MaehashiCity TOKYO : Sinjyuku IBARAKI : MitoCity

How can I plotly a ggplot treemap?

自作多情 提交于 2020-06-26 22:31:52
问题 I am looking to get this gradient colors on the map: ramp <- colorRamp(c("royalblue4", "white")) ramp.list <- rgb( ramp(seq(0, 1, length = 15)), max = 255) But also, and more important, I am looking to add plotly charactheristics to the graph (specially hovering text output). This is my data: structure(list(V1 = structure(c(9L, 8L, 4L, 7L, 2L, 6L, 1L, 3L, 5L, 10L, 13L, 11L, 12L), .Label = c("Apple", "Avocado", "Banana", "Carrot", "Mango", "Mushroom", "Onion", "Orange", "Pineapple",

Different font sizes in the same annotation of matplotlib?

杀马特。学长 韩版系。学妹 提交于 2020-06-24 22:20:10
问题 I need to annotate a pylab rectangle with few data lines - which are of different length. Searching through the matplotlib documentation, and Googling, I could not find a way to give different parts of an annotation different sizes. The following snippet demonstrates the problem: import pylab from matplotlib.patches import Rectangle pylab.rcParams['verbose.level'] = 'debug-annoying' def draw_rectangle(lower, upper, entry): ax = pylab.subplot(111) r = Rectangle( lower, upper[0]-lower[0], upper