乐趣区

关于java:在JAVA中如何正确的选择集合类型

程序 = 数据结构 + 算法

程序 = 数据结构 + 算法

这是编程界十分有名的一个公式,大部分程序员在刚开始接触编程的时候就会据说这个公式,咱们也在继续一直的编程生涯中加深对这个公式的了解。

当初有一些观点认为这个公式过期了,感觉当初的程序蕴含了很多的货色,数据结构和算法曾经不足以涵盖了。但我感觉这并不是公式过期,而是咱们对于公式的了解须要与时俱进了。

这个中文的公式非常的贴切。数据结构就是数据的构造,这不单单指的是堆栈、数组、链表之类的货色,咱们定义的实体、对象都是数据结构。算法就是通过设定好的计算步骤,对数据处理的办法,这也不单单指的排序,红黑树,递归等等,只有是对数据进行解决,对于工夫的格式化展现这也是一种算法。当咱们关上视角来看这些概念的时候,咱们的程序还是由数据结构和算法组合而成的,只不过简单的程序数据结构和算法在不同的层面不同的中央混合交错,有些算法是为了将一个数据结构转换为另一个,有些算法是为了批改数据结构的内容。

通常来说数据结构能分成三类:一类是单体数据结构,比方数字、字符串。第二类是复合数据结构,比方定义的实体、对象。第三类是汇合数据集构造,比方列表,字典等等。

单体数据结构大多都是编程语言提供的根底类型或根底类型的扩大,比方 JAVA 中的 String,Integer。这类数据结构在 JAVA 程序编写的时候就会进行申明,编译的时候进行查看,很难写错。

复合数据结构大多都是针对业务进行设定的,造成一个个的实体类,这些类都含有业务含意,只有业务形象切当,这类对象也很难用错。

而汇合数据结构自身不具备程序的业务属性,在应用上也能在肯定水平上进行互相的代替,只是在不同的算法场景上哪种更适合,而如果汇合数据结构用在了不适合的中央,也并不是齐全用不了,然而会带来编程复杂度晋升,容易产生 BUG,一旦触发了 BUG 不好查问题等等负面影响。而 JAVA 提供的汇合数据结构品种也不少,常常能看到有小朋友不太能分清须要用那种汇合类型。明天再把以前画的图拿进去,一起来看看 JAVA 汇合类框架提供的这些不同的汇合类型,都有哪些个性,适宜那些场景下应用,咱们如何去抉择。明天没有代码,只给工具。

JAVA 的罕用汇合类型

JAVA 罕用汇合类型关系图

上图次要列举的是罕用的汇合类型和他们之间的关系,并不是严格的类图,所以没有很多具体的简单的接口、类之间的关系。另外这也并不是全副,只是列举了罕用的,Queue 这里要阐明一下,这里并没有列出所有的队列类型,次要起因是使用率并不如其余的这么高,次要阐明异步的作用,疏忽同步期待队列。队列当前有机会再开展说。

OK,咱们从左到右简略的理解一下,咱们这里不看代码,就看他们的个性,起源就是 JDK1.8 的源码正文。

List(列表)

容许反复的有序汇合。

ArrayList

Resizable-array implementation of the List interface.

关键字:

array:数组构造,查问块,非无效开端的增删慢。

Resizable:数组自身长度是不可变的,可能 resize 就阐明要新开拓内存来做数据的来回倒换,开端增也慢。

LinkedList

Doubly-linked list implementation of the List and Deque interfaces.

关键字:

Doubly-linked:双向链表构造,增删快,没有 resize 的需要,非手尾的其余元素查找慢。

Stack

The Stack class represents a last-in-first-out (LIFO) stack of objects.

关键字:

LIFO:后进先出

Queue(队列)

设计用来长期保留解决对象的汇合。

BlockingQueue

BlockingQueue 的 JavaDoc 没有对这种类型做一个概括性的介绍。

关键字

生产生产模式,适宜将长的解决流程异步化。

Set(Set)

不容许反复的无序汇合。

HashSet

This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. This class permits the null element.

关键字:

hash table:哈希表构造,不保障程序,增删改查快。

no guarantees as to the iteration order of the set:强调了不保障程序。

not guarantee that the order will remain constant over time:甚至随着工夫的变动程序还有可能发生变化。

LinkedHashSet

Hash table and linked list implementation of the Set interface, with predictable iteration order. This linked list defines the iteration ordering, which is the order in which elements were inserted into the set

关键字:

linked list:退出了链表构造,hash 表还在,两个构造独特作用,性能和内存占用都稍稍逊色一点。

predictable iteration order:保障程序性。

order in which elements were inserted into the set:元素插入的程序。

TreeSet

A NavigableSet implementation based on a TreeMap. The elements are ordered using their Comparable natural ordering, or by a Comparator provided at set creation time, depending on which constructor is used.

关键字:

TreeMap:基于 TreeMap 的实现,应用红黑树结构,增删时数据结构实时变动。

Comparable natural ordering:应用人造排序。

Comparator provided:或者提供一个排序办法。

Map(字典 / 映射)

提供一个对象和另一个对象的关系治理。

HashMap

Hash table based implementation of the Map interface. This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

关键字:

hash table:哈希表构造,不保障程序,增删改查快。

no guarantees as to the order of the map:强调了不保障程序。

not guarantee that the order will remain constant over time:甚至随着工夫的变动程序还有可能发生变化。

LinkedHashMap

Hash table and linked list implementation of the Map interface, with predictable iteration order. This linked list defines the iteration ordering, which is normally the order in which keys were inserted into the map

关键字:

linked list:退出了链表构造,hash 表还在,两个构造独特作用,性能和内存占用都稍稍逊色一点。

predictable iteration order:保障程序性。

order in which keys were inserted into the map:元素插入的程序。

TreeMap

A Red-Black tree based NavigableMap implementation. The map is sorted according to the Comparable natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.

关键字:

Red-Black tree based:应用红黑树结构,增删时数据结构实时变动。

Comparable natural ordering:应用人造排序。

Comparator provided:或者提供一个排序办法。

编码抉择场景速查表

如果在理论开发过程中遇到了须要应用这些汇合构造,能够珍藏上面的速查表,依据理论的编码场景抉择适合的汇合构造。

退出移动版