treemap

Java容器(List、Set、Map)知识点快速复习手册(中)

余生长醉 提交于 2020-12-09 10:35:04
前言 本文快速回顾了Java中容器的知识点,用作面试复习,事半功倍。 上篇:主要为容器概览,容器中用到的设计模式,List源码 中篇:Map源码 下篇:Set源码,容器总结 其它知识点复习手册 Java基础知识点面试手册(上) Java基础知识点面试手册(下) Java容器(List、Set、Map)知识点快速复习手册(上) HashMap http://wiki.jikexueyuan.com/project/java-collection/hashmap.html 源码分析: https://segmentfault.com/a/1190000014293372 关键词 初始容量16 扩容是2倍,加载因子0.75 头插法 0桶存放null 从 JDK 1.8 开始,一个桶存储的链表长度大于 8 时会将链表转换为红黑树(前提:键值对要超过64个) 自动地将传入的容量转换为2的幂次方 保证运算速度:确保用位运算代替模运算来计算桶下标。hash& (length-1)运算等价于对 length 取模。 hash均匀分布:数据在数组上分布就比较均匀,并且能够利用全部二进制位,也就是说碰撞的几率小, table数组+Entry []链表(散列表),红黑树 扩容操作需要把键值对重新插入新的 table 中,重新计算所有key有特殊机制(JDK1.8后) 存储结构

Java编程思想 | 第8章 对象的容纳

懵懂的女人 提交于 2020-12-07 20:12:43
8.1 集合类 1、集合(Collection):一组单独的元素,通常应用了某种规则。在这里,一个List(列表)必须按特定的顺序容纳元素,而一个Set(集)不可包含任何重复的元素。 2、映射(Map):一系列"键 - 值"对。从表面看,这似乎应该成为一个"键 - 值"对的"集合",但假若视图按照那种方式实现它,就会发现实现过程相当笨拙。这进一步证明了应该分离成单独的概念。另一方面,可以方便地查看 Map 的某个部分。只需创建一个集合,然后用它表示那一部分即可。这样一来,Map 就可以返回自己键的一个Set、一个包含自己值的List 或者包含自己“键-值”对的一个List。和数组相似,Map 可方便扩充到多个“维”,毋需涉及任何新概念。只需简单地在一个Map 里包含其他 Map(后者又可以包含更多的Map,以此类推)。 虚线框代表“接口”,点线框代表“抽象”类,而实线框代表普通(实际)类。点线箭头表示一个特定的类准备实现一个接口(在抽象类的情况下,则是“部分”实现一个接口)。双线箭头表示一个类可生成箭头指向的那个类的对象。例如,任何集合都可以生成一个反复器(Iterator),而一个列表可以生成一个ListIterator(以及原始的反复器,因为列表是从集合继承的)。 8.1.1 使用 Collections boolean add(Object) *保证集合内包含了自变量

阿里面试回来,想和Java程序员谈一谈

佐手、 提交于 2020-11-30 07:31:26
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的。 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了。 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上,而且会尽量写出一些干货。 第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题。 说实话,LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住。而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小。 甚至,就算你运气好被问到了,你也照着背下来了,也不一定就能对你的面试起到正面的作用,因为面试官万一多问一句,你可能就露馅了,那还不如干脆点说不会更好。 LZ参加的是阿里的社招面试,而社招不同于校招,问题的范围其实是很随机的。因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验。这倒不是说一两年经验的同学没有机会进这些公司

阿里面试回来,想和Java程序员谈一谈

馋奶兔 提交于 2020-11-30 01:25:10
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的。 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了。 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个话题,而这篇文章将会更加聚焦在面试前如何准备,以及工作当中如何学习这个话题上,而且会尽量写出一些干货。 第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题。 说实话,LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住。而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小。 甚至,就算你运气好被问到了,你也照着背下来了,也不一定就能对你的面试起到正面的作用,因为面试官万一多问一句,你可能就露馅了,那还不如干脆点说不会更好。 LZ参加的是阿里的社招面试,而社招不同于校招,问题的范围其实是很随机的。因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验。这倒不是说一两年经验的同学没有机会进这些公司

java容器 Map Set List

为君一笑 提交于 2020-11-29 04:34:10
容器: 在java中,如果有一个类专门用来存放其他类的对象,这个类就叫做容器,或者叫集合,集合就是将若干性质相同或者相近的类的对象组合在一起而形成一个整体。 boolean add(Object obj):向容器中添加指定的元素 Iterator iterator():返回能够遍历当前集合中所有元素的迭代器 Object[] toArray():返回包含此容器中所有元素的数组。 Object get(int index):获取下标为index的那个元素 Object remove(int index):删除下标为index的那个元素 Object set(int index,Object element):将下标为index的那个元素置为element Object add(int index,Object element):在下标为index的位置添加一个对象element Object put(Object key,Object value):向容器中添加指定的元素 Object get(Object key):获取关键字为key的那个对象 int size():返回容器中的元素数 其中map、set、和List中的方法还是有所区别的,具体用法此处不做太多说明 三种容器接口的方法详解:http://blog.csdn.net/lushuaiyin/article/details

Java核心——集合

夙愿已清 提交于 2020-11-29 00:44:19
参考 https://blog.csdn.net/stanwuc/article/details/81509083 https://www.cnblogs.com/javabg/p/7258550.html https://blog.csdn.net/yinbingqiu/article/details/60965080 https://www.imooc.com/article/71730?block_id=tuijian_wz //源码解析 https://blog.csdn.net/xuefeng0707/article/details/40797085 //扩容死锁 Java集合家族图解 https://img-blog.csdn.net/20160124221843905 整体特征 接口 子接口 是否有序 是否允许元素重复 Set 无序不可重复 AbstractSet 否 否    HashSet(基于HashMap) 否 否    TreeSet 是(用二叉排序树) 否 List   无序可重复 ArrayList 有 是        LinkedList 有 是        Vector 有 是 Map AbstractMap 否 使用key-value来映射和存储数据,key必须唯一,value可以重复    HashMap 否    TreeMap 是

java常用容器简要性能分析(List。Map。Set)

折月煮酒 提交于 2020-11-24 18:31:57
嗯,实习的时候看到这个,感觉蛮好,这里摘录学习,生活加油: 我曾经害怕别人嘲笑的目光,后来,发现他们的目光不会在我身上停留太久,人们更愿意把目光放在自己身上。 知乎上看到,讲给自己。 List List和Set都属于Collection的子接口,List集合中的元素是按照插入顺序进行排列的,允许出现重复元素, List接口下的常用实现类有 ArrayList和LinkedList ,对于List来讲, 元素只能是通过set更新,不能通过add更新,通过add只能在指定索引位置添加元素,不会实现元素的覆盖,通过remove移除 接口继承关系: ArrayList : // 查找指定位置元素的下标 public int indexOf(Object o); // 查找指定元素最后一次出现的位置 public int lastIndexOf(Object o) ; // 清空集合元素 public void clear(); // 等等...... ArrayList的特点: ** ArrayList内部是使用 数组来存储数据 ,并且是一个 "动态"的数组 ,在添加元素时,如果发现 容量不够时,会进 行扩容 。 ArrayList支持 随机访问元素 , 随机访问元素的效率是O(1) ArrayList在 尾部添加元素的效率为O(1) , add方法默认在尾部进行添加

Map排序(按key排序,按value排序)

我只是一个虾纸丫 提交于 2020-11-23 23:51:00
  主要分两种,按键排序、按值排序。 而且,按key排序主要用于TreeMap,而按value排序则对于Map的子类们都适用。 一、按键排序 按Key排序主要用于TreeMap,可以实现按照Key值的大小,在对象插入时直接插入到合适的位置,保持Map的顺序性。 来看TreeMap的构造函数: TreeMap ( Comparator <? super K > comparator): 构造一个新的、空的树映射,该映射根据给定比较器进行排序。 这里的比较器是 key的比较器。所以定义比较器时用于比较的两个参数是Key的数据类型的对象。 实例代码如下: public class MapSortTest { public static void main(String[] args) {    Map <String,String> stu=new TreeMap<>(new MyComparator()); // 传进来一个key的比较器对象来构造treemap   stu.put("apple", "55" );   stu.put( "boy", "32" );   stu.put( "cat", "22" );   stu.put( "dog", "12" );   stu.put( "egg", "11" );    // map的遍历:把key抽取出来用set存放

Java学习路线 之 javase学习路线

风流意气都作罢 提交于 2020-11-23 02:49:43
学习java已经有三年左右了,最近在复习数据结构的知识,同时也在总结我个人的学习路线,以及方式这里我将这些年我是如何进行java学习的,我是如何坚持下去的。请慢慢看下去吧。 javase学习篇 : 2016年冬12月我大一上学期的枯燥的生活结束了。放寒假回家后买了台电脑,我书顺便给我哥要了套视频,拿到视频后有个java学习路线,我就是按照那个进行学习的不过在后来我也是有所改变。具体的学习方式可以去我上篇的文章。下面我将每个学习的章节技术点以黑体加粗展示 先是从 认识面向对象 开始,因为我学过了C语言但是不是特别的熟练,而C语言没有对象的概念,他是面向过程的语言,所以就是认识什么是对象对象,java编程思想中有这样一句 “一切皆对象”,也就是在使用语言时可以把每一个部分当做对象。其实主要了解什么是对象,自己心中有这个概念就可以。 开发环境,工具 是学习任何一门语言的必备的技能,你要想搞明白这个语言的使用,“工欲善必先利器” 你就必须先把环境搭建起来,好多人工作了几年都不能把jdk给正确的安装下来,还需要baidu,这个是基础的技能,所以当我们学习的时候一定熟练掌握,比如最简单的就是把jdk的bin目录直接配置到path目录下。开发工具,你可能看的视频很多开始都是在记事本上给你演示的,其实在真正的开发中是不可能这样使用的,你想想一个个项目有时沉淀了四五年,那代码量是多么的多

java集合介绍(List,Set,Map)

岁酱吖の 提交于 2020-11-22 07:20:12
前言 介绍java的常用集合+各个集合使用用例 欢迎转载,请注明作者和出处哦☺ 参考: 1,《Java核心编程技术(第二版)》 2, http://www.cnblogs.com/LittleHann/p/3690187.html java 集合基本概念​​​​ 在《Java核心编程技术(第二版)》中是这样介绍java集合的: java中的集合框架提供了一套设计优良的接口和类,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,这是我们常用的且在数据结构中熟知的,例如:Maps,Sets,Lists,Arrays等,并且Java用面向对象的设计对这些数据结构和算法进行了封装,这极大地减轻了程序员编程时的负担。程序员也可以以这个集合框架为基础,定义更高级别的数据抽象,比如栈,队列和线程安全的集合等,从而满足自己的需要。 在日常编程中,经常需要对多个数据进行存储。从传统意义上讲,数组是一个很好的选择,但是一个数组经常需要指定好长度,且这个长度是不可变得。这时我们需要一个可以动态增长的“数组”,而java的集合类就是一个很好的设计方案。 java的集合框架可以简化为如下图所示(本图来自于《Java核心编程技术(第二版)》): 再细化后变为: 从上图中,我们可以看出java集合框架主要提供三种类型的集合(Set,List,Map)和一个迭代器。 Set