HashMap HashMap 的重要性和面试问到的频率不言而喻,这篇文章我们就 HashMap 的原理和代码来进行分析。 什么是哈希表 讨论哈希表之前,我们先来把一些常用的数据结构的增删改查的性能比较一下。 数组 :采用一段连续的存储单元来存储数据。对与指定下标的查找和插入,其时间复杂度为 O(1 ...
分类:
编程语言 时间:
2020-01-12 22:17:25
阅读次数:
99
LinkedHashMap LinkedHashMap 是一个链表,哈希表,线程不安全的,允许 key 和 value 为 null。 它继承自 HashMap ,实现了 Map 接口,内部维护了一个双向链表。每次插入数据或者访问,修改数据时,会增加节点或者调整链表的节点顺序,以决定迭代输出的顺序。 ...
分类:
编程语言 时间:
2020-01-12 22:08:44
阅读次数:
96
Deque 双端队列,既可以当队列使用,也可以当栈使用。是一个接口。我们来看看 Deque 当作栈和队列时对应的方法。 队列: | Queue Method | Equivalent Deque Method | 说明 | | | | | | | | 向队尾插入元素,失败则抛出异常 | | | | ...
分类:
编程语言 时间:
2020-01-12 21:57:31
阅读次数:
81
阻塞队列 如果我们想要在线程安全的场景下使用队列,只有两个选择,一个是上面讲过的 ConcurrentLinkedQueue,还有就是我们要将的阻塞队列。 从名字我们就可以判断出阻塞队列适用的场景,那就是生产者消费者模式。阻塞对垒的添加和删除操作在队列满或者空的时候会被阻塞。这就保证了线程安全。 阻 ...
分类:
编程语言 时间:
2020-01-12 21:50:31
阅读次数:
74
TreeMap 1. TreeMap 实现了 NavigableMap 接口,而 NavigableMap 接口继承自 SortedMap 接口,所以 TreeMap 是有序的。 2. TreeMap 底层是红黑树,所以时间复杂度为 log(n)。 3. TreeMap 并不是线程安全的。 4. T ...
分类:
编程语言 时间:
2020-01-12 21:47:35
阅读次数:
79
ConcurrentHashMap ConcurrentHashMap 是一个能够保证线程安全的 。 为什么使用concurrentHashMap HashTable 是一个典型的 。虽然 HashTable 的所有方法都用 synchronzied 修饰,但是如果我们编程时将 get 和 put ...
分类:
编程语言 时间:
2020-01-12 21:39:34
阅读次数:
78
聚合操作 步骤 1 : 聚合操作 JDK8之后,引入了对集合的聚合操作,可以非常容易的遍历,筛选,比较集合中的元素。 像这样: String name =heros .stream() .sorted((h1,h2) h1.hp h2.hp? 1:1) .skip(2) .map(h h.getNa ...
分类:
编程语言 时间:
2020-01-09 20:42:29
阅读次数:
72
Java Comparator和Comparable 步骤 1 : Comparator 假设Hero有三个属性 name,hp,damage 一个集合中放存放10个Hero,通过Collections.sort对这10个进行排序 那么到底是 hp小的放前面?还是damage小的放前面 ?Colle ...
分类:
编程语言 时间:
2020-01-06 21:07:52
阅读次数:
76
1.Collection 接口与集合操作方法 /** * java.util.Collection 接口 * 集合框架 * 集合是用来保存一组元素的,不同的实现类实现了不同数据结构。 * Collection是所有集合的顶级接口,规定了所有集合都必须具备的功能。 * * 集合与数组一样,保存一组元素 ...
分类:
编程语言 时间:
2020-01-05 13:32:01
阅读次数:
99
java.lang. 提供利用 Java 编程语言进行程序设计的基础类。最重要的类是 Object(它是类层次结构的根)和 Class(它的实例表示正在运行的应用程序中的类) java.util. 包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符 ...
分类:
编程语言 时间:
2020-01-04 20:50:57
阅读次数:
145