treemap

【009期】JavaSE面试题(九):集合之Set

China☆狼群 提交于 2020-08-07 17:29:46
      2020年 百日百更 原创 Java面试题库之往期回顾   【    开篇介绍   大家好,我是 Java面试题库 的 提裤姐 ,今天这篇是面试系列的第九篇,主要总结了JavaSE中集合相关面试题,这篇是集系列的第二篇,主要讲解Set集合,第三篇主要讲解Map集合。在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到 百日百更 ,希望你也可以跟着百日百刷,一百天养成一个好习惯。    Q:    List和Set的区别?   List,Set都是继承自Collection接口。都是用来存储一组相同类型的元素的。   List特点:元素有放入顺序,元素可重复 。   有顺序,即先放入的元素排在前面。   Set特点:元素无放入顺序,元素不可重复。   无顺序,即先放入的元素不一定排在前面。不可重复,即相同元素在set中只会保留一份。所以,有些场景下,set可以用来去重。    注意:set在元素插入时是要有一定的方法来判断元素是否重复的。这个方法很重要,决定了set中可以保存哪些元素。    Q:    Set如何保证元素不重复?   在Java的Set体系中,根据实现方式不同主要分为两大类。 HashSet 和 TreeSet 。   1、TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值 2、HashSet

知识梳理(新增日期类&正则表达式&泛型&迭代器&比较器& 基于Pinyin4J实现中文排序)

倖福魔咒の 提交于 2020-08-07 11:10:08
新增日期类&正则表达式&泛型&迭代器&比较器& 基于Pinyin4J实现中文排序 目录:LocalDateTime & DateTimeFormatter & Pattern & Matcher & 泛型 & Collection接口 & List & 迭代器(Iterator) & Comparator(比较器) & 基于Pinyin4J实现中文排序 & Map LocalDate //获取当前系统时间所表示的日期对象 LocalDate date = LocalDate . now ( ) ; //获取月份值(年周日同理) Date . getMonthValue ( ) ; //根据指定的日期构建一个LocalDate对象 LocalDate date2 = LocalDate . of ( 2020 , 7 , 8 ) ; LocalTime //获取当前系统时间所表示的日期对象 LocalTime time = LocalTime . now ( ) ; //获取时(分秒) time . getHour ( ) ; //根据指定的日期构建一个LocalTime对象 LocalTime time = LocalDate . of ( 12 , 11 , 18 ) ; LocalDateTime //获取当前系统时间所表示的日期对象 LocalDateTime time =

恕我直言你可能真的不会java第12篇-如何使用Stream API对Map类型元素排序

让人想犯罪 __ 提交于 2020-08-07 10:54:08
在这篇文章中,您将学习 如何使用Java对Map进行排序 。前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题。所以我决定写这样一篇文章。在Java中,有多种方法可以对Map进行排序,但是我们将重点介绍Java 8 Stream,这是实现目标的一种非常优雅的方法。 一、什么是Java 8 Stream 使用Java 8 Streams,我们可以按键和按值对映射进行排序。下面是它的工作原理: 将Map或List等集合类对象转换为Stream对象 使用Streams的 sorted() 方法对其进行排序 最终将其返回为 LinkedHashMap (可以保留排序顺序) sorted() 方法以a Comparator 作为参数,从而可以按任何类型的值对Map进行排序。如果对Comparator不熟悉,可以看本号前几天的文章,有一篇文章专门介绍了使用Comparator对List进行排序。 二、学习一下HashMap的merge()函数 在学习Map排序之前,有必要讲一下HashMap的merge()函数,该函数应用场景就是当Key重复的时候,如何处理Map的元素值。这个函数有三个参数: 参数一:向map里面put的键 参数二:向map里面put的值 参数三:如果键发生重复,如何处理值。可以是一个函数,也可以写成lambda表达式。

List、Set、Map有什么异同(详解)

风流意气都作罢 提交于 2020-08-07 06:58:57
引言:Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中 Java集合框架(常用接口): Collection 接口存储一组不唯一,无序的对象 (父类接口) List 接口存储一组不唯一,有序(插入顺序)的对象 Set 接口存储一组唯一,无序的对象 Map接口存储一组键值对象,提供key到value的映射 一、List接口 List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。 1.可以允许重复的对象。    2.可以插入多个null元素。 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。 4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。 ArrayList ArrayList是一个动态数组,也是我们最常用的集合。它允许任何符合规则的元素插入甚至包括null

Java hashCode() 和 equals()的若干问题解答

我是研究僧i 提交于 2020-08-06 10:18:35
本章的内容主要解决下面几个问题: 1 equals() 的作用是什么 ? 2 equals() 与 == 的区别是什么 ? 3 hashCode() 的作用是什么 ? 4 hashCode() 和 equals() 之间有什么联系? 第1部分 equals() 的作用 equals() 的作用是 用来判断两个对象是否相等 。 equals() 定义在JDK的Object.java中。通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等。源码如下: public boolean equals(Object obj) { return ( this == obj); } 既然Object.java中定义了equals()方法,这就意味着所有的Java类都实现了equals()方法,所有的类都可以通过equals()去比较两个对象是否相等。 但是,我们已经说过,使用默认的“ equals() ”方法,等价于“ == ”方法。因此,我们通常会重写equals()方法:若两个对象的内容相等,则equals()方法返回true;否则,返回fasle。 下面根据“ 类是否覆盖equals()方法 ”,将它分为2类。 (01) 若某个类没有覆盖equals()方法,当它的通过equals()比较两个对象时,实际上是比较两个对象是不是同一个对象。这时,等价于通过“==

【转】数据结构-AVL树(平衡二叉树)与红黑树(RBTree)的对比

99封情书 提交于 2020-08-06 09:58:41
(一)简介 1. AVL树:一棵AVL树或者是空树,或者是具有下列性质的二叉查找树——它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。e.g. 2. 红黑树是一种二叉树,同时它还满足下列5个特性: 每个结点是红色或者黑色的。 根结点是黑色的。 每个空结点(NULL/NIL)是黑色的。(这里将空结点作为一个特殊的结点对待,设定他们必须是黑色的。) 如果一个结点是红色的,则它的左右子结点都必须是黑色的。(但黑色结点的子结点可以是黑色的。) 对任意一个结点来说,从它到空结点的所有路径必须包含相同数目的黑色结点。 e.g. 3. 和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树)。 (二)旋转 AVL树和红黑树的插入和删除操作都需要通过树的旋转来维持平衡。树的左旋和右旋的过程用一个图来直观地表示: 1. 左旋:父结点成为右子结点的左子结点,的左子结点成为的右子结点。 2. 右旋:父结点成为左子结点的右子结点,的右子结点成为的左子结点。 (三)AVL树插入结点之后的调整 从最底层的违反平衡条件的结点以下的三个结点开始,

开发者必备——API设计问题

℡╲_俬逩灬. 提交于 2020-08-06 09:03:44
本文主要探讨RPC和RESTFul两种API风格的特点以及在开发中应该如何进行技术选型,截取了部分网上社区,文章关于API设计的想法和观点供读者参考取舍。 1,背景简述 API学名:应用程序接口(Application Programming Interface) 通俗的打个比方,人与人之间通过语言来交流,而程序和程序之间通过API来交流。 目前市场主流的API设计包括RPC,RESTFul,GraphQL等设计思路,关于API风格优劣,好坏众说纷纭,但客观来说:RPC资历最老,并沿用至今,RESTFul后来者居上,火了好大一阵,最新的GraphQL据说会在Githup下一版投入使用。API的选择问题丝毫不亚于跨端框架Flutter和RN的激烈斗争。但笔者坚持认为:软件开发没有银弹,技术终究会被历史裹挟,不断推进,但对于开发者来说,也许没有永恒的银弹,但在当下选择适合自己业务场景的技术却是举足轻重。 本篇文章主要探讨前两种API设计的优缺点以供读者进行技术决策的参考。 2,RPC以动词为核心 2.1 命名风格 RPC 形式的API通常是动宾结构: getUserInfo,createUser,getUserById 由于接口的个性化需求,添加新功能时,API中可能会引入其他的动词或介词如By,With,create等等,这也是RESTFul征讨RPC的主要原因 一是嫌它丑

Java开发人员犯的10大错误

心已入冬 提交于 2020-08-06 08:55:25
目录 一、将数组转换为ArrayList 二、检查数组是否包含值 三、从循环内的列表中删除元素 四、HashTable 与 HashMap 五、使用原始集合类型 六、访问权限 七、ArrayList与LinkedList 八、可变与不可变 九、Super 和 Sub的构造函数 十、还是构造函数 一、将数组转换为ArrayList 要将数组转换为 ArrayList ,开发人员通常会这样做: List<String> list = Arrays.asList(arr); Arrays.asList() 将返回 ArrayList 私有 静态类 的 Arrays ,而不是 java.util.ArrayList 类。该 java.util.Arrays.ArrayList 有 set() , get() , contains() 方法,但 没有添加元素的任何方法 ,所以它的大小是固定的。要创建一个 real ArrayList ,您应该执行以下操作: ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr)); 构造函数 ArrayList 可以接收 Collection类型,它也是超类型 java.util.Arrays.ArrayList 。 二、检查数组是否包含值 开发人员经常这样做: Set

面试半年!三面阿里,四面蚂蚁金服,居然倒在了一个Java集合之Map上?

安稳与你 提交于 2020-08-05 09:12:26
Map接口 Map与Collection并列存在。用于保存具有映射关系的数据:key-value Map中的key和value都可以是任何引用类型的数据 Map中的key用set来存放,不允许重复,即同一个Map对象所对应的类,须重写 hashCode()和 equals()方法 常用 String类作为Map的“键” key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。其中,HashMap是Map接口使用频率最高的实现类 1. 常见实现类结构 |----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) |----HashMap:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value |----LinkedHashMap:保证在遍历map元素时,可以照添加的顺序实现遍历。 原因:在原的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素。 对于频繁的遍历操作,此类执行效率高于HashMap。 |----TreeMap:保证照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序 底层使用红黑树 |----Hashtable

can we have a nested map as key within other map?

时光怂恿深爱的人放手 提交于 2020-08-05 08:02:46
问题 I have just started implementing data structures in Java and was wondering can we have a situation like this. Map<HashMap<String,String>,String> map = new HashMap<HashMap<String,String>,String>(); And if yes ,, please give a small example. If you don't found question relevant ,, please mention in comments, 回答1: You can do this, but you should not do so in most cases. The key to a map needs to be constant and its equals and hashcode need to be set up to give the correct behavior. If you modify