java集合类详解
来源:互联网 发布:备孕前准备 知乎 编辑:程序博客网 时间:2024/06/07 01:38
Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。
Java集合类的整体框架如下:
从上图中可以看出,集合类主要分为两大类:Collection和Map。
Collection是List、Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又分为两大部分:List和Set。
List接口通常表示一个列表(数组、队列、链表、栈等),其中的元素可以重复,常用实现类为ArrayList和LinkedList两者的区别是ArrayList基于数组的形式存储,查找快,增删慢,相反LinkedList基于链表,增删快,查找慢。另外还有不常用的古老集合Vector,线程同步但是效率要低,另外当容量满时会扩容一倍,而ArrayList只是增加50%
ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。
LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。
Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走出Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“synchronized”的,这个也是Vector和ArrayList的唯一的区别。
Stack: 这个类从Vector派生而来,并且增加了方法实现栈??一种后进先出的存储结构。可以用来装activity,要知道activity就是以堆栈的形式管理的。
Map是一个映射接口,其中的每个元素都是一个key-value键值对,同样抽象类AbstractMap通过适配器模式实现了Map接口中的大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,不常用的HashTable直接实现了Map接口,它和Vector都是JDK1.0就引入的集合类。
Iterator是遍历集合的迭代器(不能遍历Map,只用来遍历Collection),Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合,ListIterator则专门用来遍历List,相对于Iterator增加可往前遍历,而Enumeration则是JDK1.0时引入的,作用与Iterator相同,但它的功能比Iterator要少,它只能再Hashtable、Vector和Stack中使用。
Arrays和Collections是用来操作数组、集合的两个工具类,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,当然了,如果要用线程安全的结合类,首选Concurrent并发包下的对应的集合类。
- Java集合:集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- JAVA集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- Java集合类详解
- 数据库____操作表中数据
- Spring配置项<context:annotation-config/>解释说明
- scrala 初探(一)
- c/c++中字符输入问题
- LINUX系统启动流程
- java集合类详解
- bzoj3295【CDQ分治】
- Ural1540 Battle for the Ring
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
- HttpURLConnection用法详解
- 分糖果问题--蓝桥杯
- HTTP协议的8种请求类型
- 第十五周项目2-(1)用哈希法组织关键字
- 【MySql】---Host 'XXX' is not allowed to connect to this MySQL server