JAVA容器

Posted 代号菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA容器相关的知识,希望对你有一定的参考价值。

JAVA容器大致包括两大阵营:Collection和Map。

先来看一下Collection。

1. Collection

Collection首先实现了迭代器Iterator,这样所有Collection的子类都可以使用Iterator进行遍历。

2. List,ArrayList,LinkedList

List,有序可寻址容器

ArrayList,基于数组实现,存储空间连续,寻址容易,但是执行删除和插入困难。

LinkedList,实现了Deque和List两个接口,基于链表实现,特点是寻址困难,但是执行插入和删除操作容易。

3. Vector和Stack

Vector和Stack是古老的容器,不建议使用,如果需要用到栈,可以用ArrayDeque替代。

4. Set,TreeSet,HashSet,LinkedHashSet

Set是无序的不能寻址的容器,且里面没有重复项。

TreeSet,将元素按照红黑树存储,能够对元素进行排序。

HashSet,根据哈希算法寻址存储元素,后面会详细介绍。

LinkedHashSet,使用链表来维护元素的次序,元素看起来像按元素插入的顺序来访问集合里的元素。插入性能略低于HashSet,但是利用迭代遍历全部元素时,性能优于HashSet。

4. Queue,PriorityQueue,Deque,ArrayDeque

Queue,先入先出的容器。

PriorityQueue,违背了先入先出的原则,会对元素按照大小重排,先输出最小的元素。

Deque,双向队列,可以从队首和队尾插入元素。

ArrayDeque,可以用来替代Stack。


 

关于Map我们用到的主要如图中所示:

1. HashMap,LinkedHashMap

通过Key的HashCode计算存储位置

LinkedHashMap能够保证插入顺序和迭代顺序一致

2. TreeMap

能够保证所有的key-value处于有序的状态


操作集合的工具类:Collections

包括排序操作,查找替换操作,同步控制,设置不可变集合(只读版本的集合)

同步控制可以将指定集合包装成线程同步的集合,将线程不安全变为线程安全。


 

推荐阅读博文 http://www.cnblogs.com/LipeiNet/p/5888513.html


HashSet和HashMap的深入讨论

HashCode

equals

有时候需要重写equals和HashCode,原则是保证当两个对象通过equals返回true时,也需要两个对象的hashCode方法返回相等的值。

因为当多个元素的hashCode相同但是equals方法返回false时,就需要在一个桶里放多个元素,这样会导致性能下降。


 

顺便讨论一下==和equals

两个引用类型变量,只有当他们指向同一个对象时,==判断才会返回true。

Object提供了equals的实现,和==相同。String重写了这个方法用来比较字符串相同。

 

以上是关于JAVA容器的主要内容,如果未能解决你的问题,请参考以下文章

Java并发工具类Java并发容器

java容器学习

Docker 容器 如何用java读取宿主机里的文件?

java容器中toArray的用法

Java学习笔记—多线程(同步容器和并发容器)

Java并发机制--同步容器与并发容器