treemap

二分搜索树看这篇就足够了

半世苍凉 提交于 2020-05-08 09:43:07
二分搜索树(BST):中序遍历结果为递增序列 BST是一种特殊的二叉树,其定义如下: BST :在二叉树的基础上,任意一个节点满足大于左子树中的所有节点,小于右子树中的所有节点。 注意点: BST的定义中没有等号 ,后续代码中可以看到,在插入时,相等的元素会被忽略掉。 BST的中序遍历结果为递增序列(应用很广),证明:L<node<R; BST是动态数据结构 ,即容量会自动扩缩(插入,删除)。 插入过程:牢记BST的定义,为null时才插入。 private Node add(Node node,E e) :向以 node 为根节点的BST中插入新的元素 e ,并返回新的根节点。 private Node add(Node node,E e){ if(node==null){ return new Node(e); } if(e.compareTo(node.e)<0){//左边插入。其余不变 node.left=add(node.left,e); }else if(e.compareTo(node.e)){ node.right=add(node.right,e); } //相等,忽略。 return node; } public void add(E e){//从根节点开始找。 root=add(root,e); } 删除过程(最复杂):牢记BST的定义,找到时才删除。

JavaScript实现集合与字典

别等时光非礼了梦想. 提交于 2020-05-08 06:10:22
JavaScript实现集合与字典 一、集合结构 1.1.简介 集合比较常见的实现方式是 哈希表 ,这里使用JavaScript的Object类进行封装。 集合通常是由一组 无序的 、 不能重复 的元素构成。 数学中常指的集合中的元素是可以重复的,但是计算机中集合的元素不能重复。 集合是特殊的数组: 特殊之处在于里面的元素 没有顺序 , 也不能重复 。 没有顺序意味着 不能通过下标值进行访问 ,不能重复意味着 相同的对象 在集合中只会 存在一份 。 实现集合类 : 在ES6中的 Set 类就是一个集合类,这里我们重新封装一个Set类,了解集合的底层实现。 JavaScript中的 Object 类中的 key 就是一个集合,可以使用它来封装集合类Set。 集合常见的操作 : add(value) :向集合添加一个新的项; remove(value) :从集合中移除一个值; has(value) :如果值在集合中,返回 true ,否则返回 false ; clear() :移除集合中的所有项; size() :返回集合所包含元素的数量,与数组的 length 属性相似; values() :返回一个包含集合中所有值的数组; 还有其他的方法,用的不多这里不做封装; 1.2.代码实现 //封装集合类 function Set() { //属性 this.items = {} //方法

Java OOP——第六章 框架集合

左心房为你撑大大i 提交于 2020-05-07 19:01:06
1、 集合框架包含的主要内容及彼此之间的关系: 图 1 : 集合框架:是为了表示和操作集合而统一规定的一种统一的标准体系结构。 包含三大块的内容:对外的接口、接口的是实现和对集合运算的算法;     Java 集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中:      ●接口:表示集合的抽象数据类型,在图1中用虚线框表示,下图绿色的:                 ●实现:集合框架中接口的具体实现,图1中一实线表示,粗实线表示常用的:上图蓝色的:      ●算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法;如:查询、排序;      Java 提供了进行集合操作的工具类Collections(类似于Arrays类): 它提供了对集合进行排序、 遍历等多种算法实现; 2、 java 集合中的的两大类接口:Collection和Map;      ●Collection :Collection 接口存储一组不唯一,无序的对象(List:不唯一、有序;Set:唯一、无序;所以Collection接口是不唯一无序的);      ●List :List 接口继承Collection 接口,存储一组不唯一(允许重复),有序(以插入的次序来放置元素,不会重写排列)的对象;           ●Set :Set

似乎是最实用的hashtable知识总结

故事扮演 提交于 2020-05-07 13:13:29
哈希表:将对象转换为索引,然后存储在数组中。 定义注意点: 对象 :就是面向对象中的对象,可以为任何东西。整数、浮点数、日期、字符串、类。 转换 :通过 hash函数 来完成, hash函数 是hash表的核心与难点。对于整数,可以将 取模运算 作为 hash函数 。 数组 :hash表本质是就是一个数组( 静态、动态 ),这也是名称中"表"的含义。 体现的计算机思想: 空间换时间 思考角度,当空间无限时,可以使用O(1)完成各项操作,当空间只要1个时,就退化为线性表O(n)。 哈希表关注的核心问题 哈希函数如何设计 如何解决hash冲突 对于不同的关键字得到了同一个hash地址,这种现象称为hash冲突(collision),形式化为: key1≠key2,f(key1)==f(key2) ,其中 f 为hash函数。 hash函数的设计原则 一致性 :如果 a==b ,则 hash(a)==hash(b) ,这是java自定义类时必须需重写的 hashcode方法 原因。 高效性 :计算高效便捷,O(1),这也是使用动态数组,在适当的情况下resize的原因。 均匀性 : 哈希值的分布越均匀越好 , 这就是取模法中模为质数的原因 。 整数转换为索引的方法:取模法 hashcode=val%M , 其中M为一个质数 ,M的参考取值请 点击这儿 。注意,公式总 val 为正整数

2020面试题(答案上)

淺唱寂寞╮ 提交于 2020-05-05 12:51:03
(1)java面试题(基础+进阶)(必须) java中==和equals和hashCode的区别 ==是运算符,用来比较两个值、两个对象的内存地址是否相等; equals是Object类的方法,默认情况下比较两个对象是否是同一个对象,内部实现是通过“==”来实现的。 如果想比较两个对象的其他内容,则可以通过重写equals方法, hashCoed也是Object类里面的方法,返回值是一个对象的哈希码,同一个对象哈希码一定相等,但不同对象哈希码也有可能相等。 1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。 2、如果两个对象不equals,他们的hashcode有可能相等。 3、如果两个对象hashcode相等,他们不一定equals。 4、如果两个对象hashcode不相等,他们一定不equals。 int、char、long各占多少字节数(笔试题多出现) Int:4字节 chat:2字节 long\double:8字节 int与integer的区别 (笔试) 1、Integer是int的包装类,int则是java的一种基本数据类型 2、Integer变量必须实例化后才能使用,而int变量不需要 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 4

Java基础系列-Comparable和Comparator

左心房为你撑大大i 提交于 2020-05-04 04:43:23
原创文章,转载请标注出处: 《Java基础系列-Comparable和Comparator》 一、概述 Java中的排序是由Comparable和Comparator这两个接口来提供的。 Comparable表示可被排序的,实现该接口的类的对象自动拥有排序功能。 Comparator则表示一个比较器,实现了该接口的的类的对象是一个针对目标类的对象定义的比较器,一般情况,这个比较器将作为一个参数进行传递。 二、Comparable Comparable的中文意思就是可被排序的,代表本身支持排序功能。只要我们的类实现了这个接口,那么这个类的对象就会自动拥有了可被排序的能力。而且这个排序被称为类的自然顺序。这个类的对象的列表可以被Collections.sort和Arrays.sort来执行排序。同时这个类的实例具备作为sorted map的key和sorted set的元素的资格。 假如a和b都是实现了Comparable接口的类C的实例,那么只有当a.compareTo(b)的结果与a.equals(b)的结果一致时,才称类C的自然顺序与equals一致。强烈建议将类的自然顺序和equals的结果保持一致,因为如果不一致的话,由该类对象为键的sorted map和由该类对象为元素的sorted set的行为将会变得很怪异。

Comparable 和 Comparator的理解

生来就可爱ヽ(ⅴ<●) 提交于 2020-05-04 03:45:14
对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compareTo方法接受任意类型的参数,来进行比较 list或者数组实现了这个接口能够自动的进行排序,相关类的方法有Collections.sort(),Arrays.sort(); SortedMap 接口的key内置了compareTo方法来进行键排序,SortedSet 也是内置了compareTo方法作为其内部元素的比较手段 compareTo()方法与equals()方法的比较 compareTo()方法不同于equals()方法,它的返回值是一个int类型 int a = 10,b = 20,c = 30,d = 30; a.compareTo(b) // 返回 -1 说明 a 要比 b 小 c.compareTo(b) // 返回 1 说明 c 要比 b 大 d.compareTo(c) // 返回 0 说明 d 和c 相等 而equals 方法返回的是boolean 类型 x.equals(y) // true 说明x 与 y 的值 相等 , false 说明x 与 y 的值 不相等 代码 Comparable 更像是一个内部排序接口,一个类实现了Comparable比较器

二.JAVA中的一些零碎知识点

好久不见. 提交于 2020-05-04 00:23:19
面向对象基础: 类的第四个成员:代码块 基础-函数-静态方法、非静态方法、静态成员、非静态成员与多线程 成员变量和局部变量的区别 JVM内存结构——堆、栈、方法区 Java中必须了解的常用类 集合: hashcode()和equals()的作用、区别、联系 Java集合类: Set、List、Map、Queue使用场景梳理 集合的遍历方式(list,set,map) List和Set排序 Map集合排序(treeMap) 泛型: Java泛型中<? extends E>和<? super E>的区别 来源: oschina 链接: https://my.oschina.net/u/4399176/blog/4143585

【面试 集合】【第五篇】集合的常见问题

不羁的心 提交于 2020-05-03 21:15:44
1.你常用的JDK中的集合都有哪些?你在项目中都是怎么用的 =============================================================== 2.你了解hashMap的底层原理么?你说一下    =============================================================== 3.ConcurrentHashMap的底层原理是什么 =============================================================== 4.hashMap、hashTable和ConcurrentHashMap的区别是什么   1》hashMap 初始化大小16、每次扩充2n、若给定初始化大小,实际创建2的幂次方大小、线程不安全   2》hashTable初始化大小11、每次扩充2n+1、若给定初始化大小,就创建给定大小、线程安全、相比hashMap,所有公开方法加了synchronized关键字,所以线程安全,但是效率低下,因为是给整体加锁   3》concurrentHashMap 初始化大小,也就是默认并发度16、若给定初始化大小,实际创建2的幂次方大小、线程安全、并且是分段锁,并发效率比HashTable高 ============================

通过2-3树理解红黑树

▼魔方 西西 提交于 2020-05-02 09:18:05
一、简介   前面的文章我们循序渐进的讲解了 《二叉树》 《二分搜索树》 《AVL-平衡二叉树》 ,从左至右互为基础。尤其是二分搜索树给了我们如何将数据组织成为搜索树的思想,当然二分搜索树存在的天然问题--在极端情况下回退化为链表。所以引出了AVL-平衡二叉树,通过再平衡即LL,LR,RR,RL四个旋转操作维护了一棵平衡的二分搜索树。本章节我们继续梳理一个高阶的树结构即:红黑树。想必大家都知道,红黑树如何维持平衡,如何进行颜色反转让人很难理解,虽然很多博文很多书对红黑树都有讲解,但是想要掌握或者精通红黑树依然让大家望而生畏。本文,我们借鉴《算法-4》对红黑树的分析,从2-3树入手来理解红黑树。至于为什么从2-3树入手去理解红黑树是有原因的,就像达尔文的进化论,任何一个物种都不会是从石头中蹦出来的一样。数据结构的发展同样遵循着生物进化的理论。红黑树正是从2-3树进化来的一种树结构。   后面会持续更新数据结构相关的博文。   数据结构专栏: https://www.cnblogs.com/hello-shf/category/1519192.html   git传送门: https://github.com/hello-shf/data-structure.git 二、2-3树   2.1、2-3树的性质   2-3树类似于一棵完美二叉树(满二叉树),不过就是2