B树和TreeSet与TreeMap】的更多相关文章

1. 此前二叉搜索树相关的内容我们均假设可以把整个数据结构存储在计算机的内存中,但是如果数据量过大时,必须把数据结构放在磁盘上,导致大O模型不在适用.目前计算机处理器每秒至少可以执行5亿条指令,磁盘访问一次需要大概10ms,1s可访问100次左右:这就意味着一次磁盘访问相当于执行50万条指令.所以导致运行时间增长的主要就是因为磁盘访问次数,我们愿意为减少磁盘访问进行大量的计算.但是典型的二叉搜索树的高度为log2(N),查询一个数据就要进行log2(N)次比较,这无疑导致磁盘访问次数比较大,运行…
TreeSet与TreeMap的关系: 1.TreeSet 实际上就是用TreeMap来组织数据的,因为在TreeSet中保存了一个NavigableMap<e,Object>接口实例变量,而该接口的实现类就是TreeMap 2.TreeSet与TreeMap都是用二叉树的数据结构来存储数据 3.TreeSet和TreeMap中保存的数据除了Integer和String等有默认顺序的类型外的自定义类型都需要实现Comparable接口并重写compareTo()方法. TreeSet和Tree…
我本来打算仔细的去分析分析TreeSet和TreeMap排序规则,并且从底层实现和数据结构入手.当我去读完底层源码以后,我感觉我就的目标定的太大了,单单就是数据结构就够我自己写很久了,因此我决定先易后难,先把底层源码以及最直接的数据结构分析一下,至于底层的平衡二叉树以及红黑二叉树,我就不过多去介绍,因为这是底层源码优化用的,与直接实现代码没有多大关系,感兴趣的也可以去仔细研究. 树: 树是n ( n >=0)个节点的有限集.n = 0时称为空树.在任意一颗非空树种中: (1)有且仅有一个特定的称…
TreeMap和TreeSet的异同: 相同点: TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是拍好序的. TreeMap和TreeSet都是非同步集合,因此他们不能在多线程之间共享,不过可以使用方法Collections.synchroinzedMap()来实现同步 运行速度都要比Hash集合慢,他们内部对元素的操作时间复杂度为O(logN),而HashMap/HashSet则为O(1). 不同点: 最主要的区别就是TreeSet和TreeMap非别实现Set和Map接…
今天来看下set map的操作,让我们从代码出发 val data = mutable.Set.empty[Int] data ++= List(1,2,3)//在空set上加入列表 data += 4//在set上加入新元素 data --= List(2,3) println(data) //Set(1, 4)data += 1println(data)//Set(1, 4),说明Set元素不能重复data.clear() println(data)//Set() 我们可以看出,Set和Li…
如果加入TreeSet和TreeMap的元素没有实现comprable中的compareTo()方法,那么会报错"treeset cannot be cast to java.lang.Comparable". 要解决这个问题有两种方法: (1)让元素自身具有比较性:可以实现Comparable接口,实现compareTo()方法: (2)让集合自身具有比较性:可以定义比较器,即让集合实现Comparator接口,然后实现compare()方法: 方法一: 因此需要对元素类型实现Com…
目录 1.冒泡排序的实现 2.比较接口(普通数据类型.引用数据类型) 普通数据类型:冒泡排序 引用数据类型:包装类(Integer.String.Character.Date) 自定义类型:实体类:implements Comparable+compareTo|业务排序类:获取comparator对象.compare方法 3.TreeSet.TreeMap的使用 代码实现 1.冒泡排序(只演示升序) //采用泛型进行升序排列 public static <T extends Comparable…
TreeSet和TreeMap不能存放重复元素?能不能存放null?其实不是这样的——灵活的二叉树   本文链接:https://blog.csdn.net/u010698072/article/details/55255073 问题一:本来认为TreeMap不能存放重复元素?其实并非如此:其实一般情况下是不允许存放重复元素的,但是它并非这么死板,在一些情况下是可以存放重复元素的,存了又会有引入其他问题.问题二:能不能存放null呢?正常情况下是不能的,会报异常,但是经过一些处理后是可以的.解答…
TreeSet和TreeMap元素之间比较大小是借助Comparator对象的compare方法. 但有些时候,即便compare()返回0也不意味着这两个元素直观上相同. 比如元素是二元组[a,b]的形式:对于[a1,b1]和[a2,b2],规定a1>a2&&b1>b2时[a1,b1]>[a2,b2],a1<a2&&b1<b2时[a1,b1]<[a2,b2],否则[a1,b1]=[a2,b2]. 也就是说即便[a1,b1]=[a2,b2…
1. Collections用法 Collections: 集合的工具类public static <T> void sort(List<T> list) 排序,升序public static <T> int binarySearch(List<?> list,T key) 二分查找,不存在返回负数,只能针对升序集合public static <T> T max(Collection<?> coll) 最大值public static…