Java Collection入门教程

时间:2020-02-23 14:37:05  来源:igfitidea点击:

Java中的“Collections”框架随着jdk1.2的发布而开始发挥作用,并在java1.4和java5中进行了多次扩展,然后在java6中又进行了扩展。

它为我们(程序员)提供列表、集合、映射和队列,以满足大多数编码需求。而且,无论你选哪一个,至少会给你一个合理的表现。在深入讨论之前,我们先把一些事情弄清楚。

collection(小写c):表示存储和迭代对象的不同类型的数据结构。

集合(大写c):这是集合、列表和队列从中扩展的接口语法帮助:

java.util.Collection

Collections(大写c,以字符s结尾):这是一个类,它保存所有用于集合的“static”实用程序方法。

Java集合层次结构

现在问题来了……我到底该如何处理收藏?

对于,可以将对象添加到集合中。

从集合中移除对象

我们可以检查特定集合中是否有给定的对象

从集合中检索任何对象,而不将其移除。等

现在,不用再费事了,让我们开始收集。它们通常有四种变体,即:

Lists:列表

Sets:独特的东西

Maps唯一ID的事物

Queues:先进先出。

列表接口

列表接口中最重要的因素是索引。拥有索引为程序员提供了一整套索引方法。其次,三种不同的列表实现都是按索引位置排序的,这些实现的名称是:

  • ArrayList
  • Vector
  • LinkedList

ArrayList:可以把它看作是一个动态数组,我所说的动态数组是指一个可以根据需要增长和收缩的数组,而不必明确指定它的大小。

ArrayLists帮助的领域是快速迭代和快速随机访问。但这里需要注意的一点是,ArrayLists在默认情况下不会排序。

Vector:Vector有点像一个较慢的ArrayList,主要的区别是为了线程安全,向量方法都是同步的。(现在线程安全本身就是一个很大的话题,我们现在就不谈了。)

LinkedList:我们又一次发现了类似于ArrayList的东西。这里的主要区别在于,LinkedList中的元素之间是双重链接的。

LinkedList的迭代速度比ArrayList慢,但当需要快速插入或者删除时,它是更好的选择。我们将在教程中更详细地解释Java中ArrayList和LinkedList之间的区别

set接口

这里的“集合”这个词和你在学校里学过的数学很相似,如果你不喜欢那一章,不要开始害怕它。这里唯一重要的是在一个集合中我们不允许重复。与列表接口一样,set接口也有三种不同的实现方式,即:

  • HashSet
  • LinkedHashSet
  • TreeSet

HashSet:这只是一个未排序、无序的集合。这里重要的是LinkedHashSet使用传入对象的哈希代码。

LinkedHashSet:你现在一定已经猜到了,这有点类似于HashSet,这是绝对正确的,所以,我只告诉你这两者之间的区别(在这里输入drum roll sound)是HashSet的一个有序版本,它在所有元素之间维护一个双重链接的列表。

TreeSet:这是一个经过排序的集合,使用红黑树结构,保证元素将 当然按照自然顺序按升序排列。

map接口

map接口只关心这样一个事实,即集合中已经存在或者正在添加到集合中的所有对象的所有标识符本质上都是完全唯一的。这里的键和值都是对象。

与上述两个接口一样,Map接口也有三种不同的实现方式,即:

哈希图

哈希表

LinkedHashMap

HashMap:这会给你一个未排序、无序的映射,其中键在映射中的位置是基于键的

hashCode()

函数的值。

HashTable:是HashMap的同步对应。它不允许任何

NULL

.

LinkedHashMap:这个实现维护了插入顺序,这是我们讨论迭代和它的其他用途时非常重要的特性,但是有一个非常令人怀疑的缺点,就是速度非常慢。

我们可能还对本教程感兴趣,它详细解释了HashMap和TreeMap之间的区别

队列接口

是的,我们说的是正常的排队。我们几乎在任何地方都会遇到这个问题,包括在我们阅读本文之前向我们显示的结果队列。

它基本上遵循先进先出的原则

PriorityQueue:PriorityQueue存在的原因是创建一个与典型的FIFO不同的“PriorityQueue,PriorityQueue”。

第二,在这个实现中,元素是按自然顺序或者根据比较器排序的。

这些是Java中的基本集合类型,这个主题还有很多要讨论的内容,还有很多需要解释的地方,所以如果我们在第一次使用时还没有了解到不同集合实现之间的所有差异,就不要扯毛了。