首页 > 代码库 > JAVA容器
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容器