Java的集合

来源:互联网 发布:同花顺软件怎么使用 编辑:程序博客网 时间:2024/06/15 12:11

最近在学习《Java核心技术》这本书,其中的集合是比较重要的知识,所以在这里结合自己的理解做一个笔记,以供自己查阅。

首先是Java中的集合的元素重复问题。Set 集合不允许重复的。如HashMap中的元素就是不允许重复的。

在Java中,除了以Map结尾的类以外,其他类都实现了Collection接口,而Map结尾的类实现了Map接口。
如下,Java中的各种集合(转自Java核心技术):
转自Java核心技术

下面将对最重要的链表和数组列表等进行一下简述。

链表

我们应该大量使用过数组和相应的ArrayList类。然而,数组和数组列表都有一个重大的缺陷。这就是从数组中间位置删除一个元素需要付出很大的代价。原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动,插入一个元素也是如此。
然而链表解决了这个问题。数组是在连续的存储位置上存放对象引用。链表将每个元素存放在独立的节点中,每个节点存放着上下一个节点的引用。从链表中删除一个元素是一个很轻松的操作,只需要对被删除元素周围的节点更新一下即可。
在Java中已经提供了LinkedList,也就是链表。但是,链表不支持快速的随机访问。如果要查看链表中的第n个元素,就必须从头开始,越过n-1个元素。没有捷径可走。所以,当我们需要采用整数索引访问元素时,我们通常不选取链表。
所以,下面一段代码的访问效率会非常低:(list是LinkedList)

for(int i = 0; i < list.size(); i++){    //do something}

我个人认为自己在开发中使用LinkedList比较少,而主要使用的是ArrayList,希望自己在后面的开发中,如果涉及到插入删除元素而不是随机访问元素的情况时,可以考虑使用链表。

数组列表

在上面,介绍了List接口和实现了这个接口的LinkedList类。List接口用于描述一个有序的集合,而且集合中每个元素的位置非常重要。如果涉及到随机访问每个元素(根据索引),我们可以使用数组,在Java里,ArrayList封装了一个动态再分配的对象数组。
在java中,当我们需要动态数组时,有可能使用Vector类。那么Vector和ArrayList的区别是什么呢?Vector类所有的方法都是同步的。可以由两个线程安全地访问一个Vector对象。但是,如果由一个线程访问Vector,代码要在同步操作上消耗大量的时间。而ArrayList方法是不同步的。

后面是我参考的别人的文章Java 集合类图,谢谢原作者~
Java集合
上面这幅图展现了集合的有序性和元素的重复性。

这篇文章只是我对书上的一些知识点的记录,后面我会不断地进行补充,以供查阅。

1 0
原创粉丝点击