briarbear | 熊大

/- 记录技术成长点滴 -/


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

Java集合-PriorityQueue工作原理及实现

发表于 2018-06-26 | 分类于 Java

【转载】 原文链接

参考资料

基于最小堆(小根堆)的topn算法
基于堆实现的优先级队列:PriorityQueue 解决 Top K 问题
Java优先队列(PriorityQueue)示例
JDK源码研究PriorityQueue(优先队列)
优先级队列:PriorityQueue

Java集合-CopyOnWriteArrayList工作原理及实现

发表于 2018-06-26 | 分类于 Java

【转载】原文链接

并发优化的ArrayList。用CopyOnWrite策略,在修改时先复制一个快照来修改,改完再让内部指针指向新数组。

因为对快照的修改对读操作来说不可见,所以只有写锁没有读锁,加上复制的昂贵成本,典型的适合读多写少的场景。如果更新频率较高,或数组较大时,还是Collections.synchronizedList(list),对所有操作用同一把锁来保证线程安全更好。

增加了addIfAbsent(e)方法,会遍历数组来检查元素是否已存在,性能可想像的不会太好。

Java集合-LinkedList工作原理及实现

发表于 2018-06-26 | 分类于 Java

【转载】原文链接

1. 概述

以双向链表实现。链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。

按下标访问元素–get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起)。

插入、删除元素时修改前后节点的指针即可,但还是要遍历部分链表的指针才能移动到下标所指的位置,只有在链表两头的操作–add(), addFirst(),removeLast()或用iterator()上的remove()能省掉指针的移动。

LinkedList是一个简单的数据结构,与ArrayList不同的是,他是基于链表实现的。

阅读全文 »

Java集合-ArrayList工作原理及实现

发表于 2018-06-25 | 分类于 Java

【转载】 原文链接

1. 概述

关于Java集合的小抄中是这样描述的:

以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。

按数组下标访问元素–get(i)/set(i,e) 的性能很高,这是数组的基本优势。

直接在数组末尾加入元素–add(e)的性能也高,但如果按下标插入、删除元素–add(i,e), remove(i), remove(e),则要用System.arraycopy()来移动部分受影响的元素,性能就变差了,这是基本劣势。

阅读全文 »

Java集合-TreeSet工作原理及实现

发表于 2018-06-25 | 分类于 Java

【转载】 原文链接

1.概述

阅读全文 »

Java集合-LinkedHashSet工作原理及实现

发表于 2018-06-25 | 分类于 Java

【转载】原文链接

阅读全文 »

Java集合-HashSet工作原理及实现

发表于 2018-06-25 | 分类于 Java

【转载】 原文链接

阅读全文 »

Java集合-TreeMap工作原理及实现

发表于 2018-06-25 | 分类于 Java

【转载】原文链接

1. 概述

A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.
This implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations. Algorithms are adaptations of those in Cormen, Leiserson, and Rivest’s Introduction to Algorithms.

之前已经学习过HashMap和LinkedHashMap了,HashMap不保证数据有序,LinkedHashMap保证数据可以保持插入顺序,而如果我们希望Map可以保持key的大小顺序的时候,我们就需要利用TreeMap了。

阅读全文 »

Java集合-集合框架概述

发表于 2018-06-25 | 分类于 Java

【转载】原文链接

1. 概述

什么是集合?

这Java官方的入门文档是这样描述集合的:

Collection(有时候也叫container)是一个简单的对象,它把多个元素组织成一个单元。集合可以用来存储、检索、操作、通信。通常情况下,集合代表了一个自然数据项,比如一组手牌(牌的集合)、邮件文件夹(邮件的集合)、电话目录(姓名到电话的映射)。如果你使用过Java或者其他语言,你应该很熟悉集合。

阅读全文 »

Java集合-LinkedHashMap工作原理与实现

发表于 2018-06-25 | 分类于 Java

【转载】原文链接 - (部分修改与补充)

1. 概述

在理解了介绍的HashMap后,我们来学习LinkedHashMap的工作原理及实现。首先还是类似的,我们写一个简单的LinkedHashMap的程序:

阅读全文 »
1234
Briar·bear

Briar·bear

Java程序员成长之路

34 日志
7 分类
24 标签
GitHub
© 2019 Briar·bear
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4