用一个集合这么难?
集合
|
|
允许元素重复否 |
|
Collection |
否 |
是 |
|
List |
是 |
是 |
|
Set |
AbstractSet |
否 |
否 |
HashSet |
|||
TreeSet |
是(用二叉树排序) |
||
Map |
AbstractMap |
否 |
使用key-value来映射和存储数据,Key必须惟一,value可以重复 |
HashMap |
|||
TreeMap |
是(用二叉树排序) |
目的:
用数组存储数据时只能具有简单的组织形式,而且大小有时候也不确定的需求也无法满足,因此需要具有更多操作的集合来进行数据存储
分类:
Vector(矢量)
Bitset(位集)
Stack(栈)
Hashtable(散列表):
在散列表中有一系列问题,再存入一个对象充当key的时候,存入方式的…
缺点:
- 由于对于通用性的考虑,集合存储对象时,会丢弃对象的类型,任何对象都可以进入集合
- 正式使用之前,必须进行“造型”,指定对象的类型
Collection接口方法:
基本操作 |
boolean add(Object element) |
添加一个元素 |
boolean remove(Object element) |
删除一元素 |
|
查询操作 |
int size() |
返回元素数目 |
boolean isEmpty() |
判断是否为空 |
|
boolean contains(Object element) |
判断是否包含某元素 |
|
Iterator iterator() |
创建一个迭代器 |
|
组操作 |
boolean containsAll(Collection collection) |
另一集合是否是当前集合的子集 |
boolean addAll(Collection collection) |
并 |
|
void clear() |
删除所有元素 |
|
void removeAll(Collection collection) |
去除集合的一个子集 |
|
void retainAll(Collection collection) |
保留集合的一个子集 |
Iterator迭代器:
boolean hasNext() |
判断是否有元素可以迭代 |
E next() |
返回迭代的下一个元素 |
void remove() |
移除迭代器返回的最后一个元素 |
List接口方法:
基本操作 |
void add(int index, Object element) |
在指定位置添加一个元素 |
boolean remove(int index) |
删除一个指定位置的元素 |
|
E set(int index, E element) |
用指定元素替换指定位置的元素 |
|
查询操作 |
Object get (int index) |
获取指定位置的元素 |
int indexOf(Object element) |
获取指定元素的第一次出现的位置 |
|
int lastIndexOf(Object element) |
获取指定元素的最后一次出现的位置 |
|
组操作 |
Object set(int index, Object element) |
将index位置上的对象替换为指定元素并返回老元素 |
List subLIst(int fromIndex, int toIndex) |
返回一个[fromIndex,toIndex)的子列表 |
|
迭代器 |
ListIterator listIterator () |
返回一个默认开始位置为0的迭代器 |
ListIterator listIterator(int startIndex) |
返回一个开始位置为startIndex迭代器 |
ListIterator迭代器:
void add(E e) |
将指定的元素插入列表 |
E previous() |
返回列表的前一个元素 |
boolean hasPrevious() |
逆向迭代列表,查看是否有多个元素 |
int nextIndex() |
返回下一个元素的索引 |
int previousIndex() |
返回前一个元素的索引 |
void set(E e) |
替换迭代器返回的最后一个元素 |
ArrayList和LinkedList的区别:
|
简述 |
实现 |
操作特性 |
List |
提供基于索引的对成员的随机访问 |
ArrayList |
提供快速的基于索引的成员访于索引的成员访问,对尾部成员的增加和删除支持较好 (随机访问) |
LinkedList |
对列表中任何位置的成员的增加和删除支持较好,但对基于索引的成员访问支持性能较差(随机存取) |
Github:
https://github.com/RainFool