
数据结构
文章平均质量分 93
不二人生
刀光剑影江湖情,摧枯拉朽浪滔滔。功名利禄拂衣去,山高水远路迢迢。一个上得了厅堂下得了厨房、左手写诗右手写词的男人
展开
-
Java时间知多少
java 中的时间在很长的一段时间里,Java 的日期时间解决方案一直是一个备受争议的设计,它的问题很多,有的是概念容易让人混淆(比如:Date 和 Calendar 什么情况下该用哪个),有的是接口设计的不直观(比如:Date 的 setMonth 参数是从 0 到 11),有的是实现容易造成问题(比如:前面提到的 SimpleDateFormat 需要考虑多线程并发的问题,需要每次构建一个新的对象出来)。这种乱象存在了很长时间,有很多人都在尝试解决这个问题(比如 Joda Time)。从 Java原创 2021-03-25 21:40:05 · 64251 阅读 · 2 评论 -
深度剖析Java集合之BitSet
BitSetBitSet类实现了一个按需增长的位向量,实际是由“二进制位”构成的一个Vector。每一位都是一个表示true或者false 的boolean 值。如果我们希望高效地存储这样只有两种类型的数据,就可以使用BitSet。首先需要说明的是,BitSet并不属于集合框架,没有实现List或Map或者Set接口,BitSet更多的表示一种开关信息,对于海量不重复数据,利用索引表示数据的方式,将会大大节省空间使用。位图vector of bits也就是位图,由于可以用非常紧凑的格式来表示给定范原创 2021-01-24 19:50:39 · 65660 阅读 · 0 评论 -
深度剖析Java集合之ArrayDeque
ArrayDequeArrayDeque是Deque接口的一个实现,使用了可变数组,所以没有容量上的限制。同时,ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用。ArrayDeque是Deque的实现类,可以作为栈来使用,效率高于Stack;也可以作为队列来使用,效率高于LinkedList。需要注意的是,ArrayDeque不支持null值。ArrayDeque 初识说明书和继承关系还是按照国际惯例,先看一下ArrayDeque 的说明书,其实往往很多时候你的困原创 2021-01-23 11:22:26 · 65156 阅读 · 1 评论 -
深度剖析Java集合之LinkedDeque
LinkedDeque前面我们学习了Queue,在Java 中的实现其实就是LinkedList,我们的使用方式就是Queue<Integer> numbers = new LinkedList<>();通过声明一个Queue接口窄化了对LinkedList的方法的访问权限,使得对象的使用更像是一个队列而不是一个原生的LinkedList我们发现LinkedList可以当做Queue使用那是因为LinkedList 实现了Queue接口,但是我们从上面的实现中注意到另外一个问题原创 2021-01-20 20:58:59 · 64757 阅读 · 1 评论 -
深度剖析Java集合之LinkedQueue
前面我们学习了Stack,学习了ArrayList ,学习了Vector,**其实Vector和ArrayList一样,都是基于数组实现的List,也就是说都是属于List 阵营的,其主要的区别是在于线程安全上**,二者的底层实现都是基于数组的,stack 集合实现了数据结构Stack 的定义,底层依赖Vector 实现也就是数组,**对栈顶元素的操作实际上是对数组尾部元素的操作**,因为这样可以避免数据的迁移。也就是说我们是用数组实现的Stack,今天我们学习一个和Stack同样重要的数据结构Queu原创 2021-01-20 14:05:26 · 65067 阅读 · 0 评论 -
深度剖析Java集合之EnumSet
EnumSet 是一个用来存储枚举常量的集合,其底层是通过位向量实现的,所以有比较好的一个性能。原创 2021-01-17 20:01:18 · 64589 阅读 · 0 评论 -
Java数据类型—StringBuilder与StringBuffer
StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢?前面我们讲解到String 对象的不可变性,以及它的不足那就是创建新的对象,因为它是不可变的,所以你对它的操作逻辑就体现在另外一个对象里,那就是你的操作新创建的对象。...原创 2020-12-22 20:24:28 · 44954 阅读 · 2 评论 -
Java集合汇总篇
一. 集合框架Java 集合框架一些列的接口和类来实现很多常见的数据结构和算法,例如 LinkedList 就是集合框架提供的实现了双向链表的数据结构,关于这一篇文章建议大家收藏,我会不断地完善和扩充它的内容,例如最下面的系列文章我以后也会对它进行不断的更新集合框架的接口集合框架提供了很多接口,这些接口都包含了特定的方法来实现对集合上的特定操作)我们将要学习这些接口以及子接口和它们的各种实现类,在开始之前我们先简单学习一下这些广泛运用的接口,可以看到整个集合框架,总共有三个顶级接口Collecti原创 2020-12-13 20:25:05 · 223731 阅读 · 3 评论 -
深度剖析Java集合之Stack
Java 集合框架提供了一个集合Stack,它提供了stack 数据结构的功能stack 集合实现了数据结构Stack 的定义,底层依赖Vector 实现也就是数组,对栈顶元素的操作实际上是对数组尾部元素的操作,因为这样可以避免数据的迁移原创 2020-12-13 13:24:19 · 42964 阅读 · 0 评论 -
深度剖析Java集合之TreeSet
HashMap 增加了双向链表维持了顺序,HashSet使用了HashMap弱化了Key-Value 中的Value 实现了去重且只有value集合的功能,LinkedHashSet 则是使用了LinkedHashMap,那么TreeSet 呢,也是使用了TreeMap 吗,其实就是的,学完本文你就知道了原创 2020-12-10 19:57:32 · 42660 阅读 · 0 评论 -
深度剖析Java集合之TreeMap
之前 LinkedHashMap那篇文章里提到过了,HashMap 是无序的,所有有了 LinkedHashMap,加上了双向链表后,就可以保持元素的插入顺序或者访问顺序,那 TreeMap 呢,TreeMap 由红黑树实现,可以保持元素的自然顺序,这里指的是实现了 Comparable 接口的自然排序,或者是由Comparator定义的自定义排序原创 2020-12-10 11:14:36 · 42713 阅读 · 0 评论 -
深度剖析数据结构—红黑树
学过数据数据结构都知道二叉树的概念,而又有多种比较常见的二叉树类型,比如完全二叉树、满二叉树、二叉搜索树、均衡二叉树、完美二叉树等;今天我们要说的红黑树就是就是一颗非严格均衡的二叉树,均衡二叉树又是在二叉搜索树的基础上增加了自动维持平衡的性质,插入、搜索、删除的效率都比较高。红黑树也是实现TreeMap存储结构的基石。原创 2020-12-08 22:25:46 · 42255 阅读 · 2 评论 -
深度剖析Java集合之Vector
其实Vector和ArrayList一样,都是基于数组实现的List,也就是说都是属于List 阵营的,其主要的区别是在于线程安全上,二者的底层实现都是基于数组的Vector 实现线程安全的方式就是给方法上加synchronized 锁,**所以线程安全的情况下请使用ArrayList,多线程的情况下使用Vector**,Vector 在目前的开发中也用的不多,主要是它实现线程安全的方式比较低效,但是如果有一天Java 将synchronized锁的效率提高了,那Vector依然是一个不错的选择原创 2020-12-08 20:32:56 · 44029 阅读 · 0 评论 -
深度剖析—LinkedList
LinkedList和ArrayList一样是集合List的实现类,虽然较之ArrayList,其使用场景并不多,但同样有用到的时候,那么接下来,我们来认识一下它。其实它们两个都同属于List阵营,只不过实现方式有所差异,ArrayList 就是借助Array 实现的List,LinkedList 就是借助双向链表(Linked) 实现的List原创 2020-12-06 20:38:47 · 43361 阅读 · 3 评论 -
深度剖析LinkedHashSet
HashMap 是一个利用数组存储key-value键值对的一个数据结构,为了有序的要求,然后我们引入了LinkedHashMap来满足我们对顺序的要求,再到后面我们学习了HashSet这种数据结构,利用的是HashMap的Key 的唯一性来实现HashSet 的去重的目的LinkedHashSet 也HashSet 一样也在内部使用了HashMap,因为LinkedHashSet要维持元素之间的顺序,所以它使用的实HashMap的有序版本,也就是LinkedHashMap原创 2020-12-05 17:15:57 · 46573 阅读 · 0 评论 -
深度剖析HashSet
HashSet是Java集合Set的一个实现类,Set是一个接口,其实现类除HashSet之外,还有TreeSet,并继承了Collection,HashSet集合很常用,同时也是程序员面试时经常会被问到的知识点我就没见过这么不要脸的数据结构,还给自己起名 HashSet 搞得跟 HashMap 是同一级别上的,对外糊弄用户,对内欺骗HashMap,每次value 都给人一不变的数据这不跟蛋壳一样了吗,一刀双割...原创 2020-12-05 13:02:29 · 42624 阅读 · 0 评论 -
深度剖析ArrayList
ArrayList是集合的一种实现,实现了接口List,List接口继承了Collection接口。ArrayList 是java 中最常用的集合类型,这是因为它使用起来非常简单,而且它提供了非常丰富的功能,并且性能非常好,这里需要注意的是性能是以牺牲了线程安全为代价的,ArrayList 好用又很大一部分来自它的动态扩容,不像数组那样你需要提前计算好数组的大小,ArrayList 会随着元素的增加自动扩容。原创 2020-12-05 09:29:10 · 45006 阅读 · 3 评论 -
集合工具类Collections深度解析
本文主要介绍Collections的常用方法,例如 Collections.sort()、Collections.shuffle()、Collections.reverse()、Collections.addAll()、Collections.copy()、Collections.binarySearch()、Collections.synchronizedXXX()还有就是针对Collections.copy() 的方式源码进行讲解,从而避免`IndexOutOfBoundsException: So原创 2020-12-03 21:30:18 · 30658 阅读 · 2 评论 -
深度剖析HashTable
HashTable 线程安全的设计,初始值和扩容的过程,为什么不支持null值,如何自定义HashTable 使其支持null值原创 2020-11-29 22:44:37 · 31601 阅读 · 3 评论 -
深度剖析Java集合之LinkedHashMap
LinkedHashMap 的put 流程,特有的方法,双向链表的实现,如何维持有序,如何自定义一个特定大小的LinkedHashMap原创 2020-11-28 22:09:44 · 32962 阅读 · 1 评论 -
深度剖析Java集合之HashMap
深度解析HashMap,hashmap 的put 流程,链表和红黑树的转化,hash 值计算的方法,table 的大小设置,加载因子 load_factor,返回值原创 2020-11-28 22:08:25 · 32164 阅读 · 5 评论