常用的几种java集合类总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一:直观框架图
简单版:
详细版:
Java集合框架
Java集合框架主要包括两种类型的容器,一种是集合(Collection),另一种是图(Map)。Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、lixxxxnkedList、HashSet、lixxxxnkedHashSet、HashMap、lixxxxnkedHashMap等等。Map常用的有HashMaplixxxxnkedHashMap等。
二、Collection接口
1.List
List接口扩展自Collection,它可以定义一个允许重复的有序集合,从List接口中的方法来看,List接口主要是增加了面向位置的操作,允许在指定位置上操作元素,同时增加了一个能够
双向遍历线性表的新列表迭代器ListIterator。AbstractList类提供了List接口的部分实现,
AbstractSequentialList扩展自AbstractList,主要是提供对链表的支持。下面介绍List接口的
两个重要的具体实现类,也是我们可能最常用的类,ArrayList和lixxxxnkedList。
1.1ArrayList
通过阅读ArrayList的源码,我们可以很清楚地看到里面的逻辑,它是用数组存储元素的,这
个数组可以动态创建,如果元素个数超过了数组的容量,那么就创建一个更大的新数组,并
将当前数组中的所有元素都复制到新数组中。假设第一次是集合没有任何元素,下面以插入
一个元素为例看看源码的实现。
1.
2.
1、找到add()实现方法。
3.
4.
5.
6.
public boolean add(E e) {
7.
8.
ensureCapacityInternal(size + 1);
// Increments modCount!!
9.
10.
elementData[size++] = e;
11.
12.
return true;
13.
14.
}
15.
16.
17.
18.
2、此方法主要是确定将要创建的数组大小。
19.
20.
21.
22.
private void ensureCapacityInternal(int
minCapacity) {
23.
24.
if (elementData ==
DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
25.
26.
minCapacity = Math.max(DEFAULT_CAPACITY minCapacity);
27.
28.
}
29.
30.
31.
32.
ensureExplicitCapacity(minCapacity);
33.
34.
}
35.
36.
37.
38.
private void ensureExplicitCapacity(int
minCapacity) {
39.
40.
modCount++;
41.
42.
if (minCapacity - elementData.length >
0)
43.
44.
grow(minCapacity);
45.
46.
}
47.
48.
49.
50.
3、最后是创建数组,可以明显的看到先是确定了添加元素后的大小之
后将元素复制到新数组中。
51.
52.
53.
54.
private void grow(int minCapacity) {
55.
56.
// overflow-conscious code
57.
58.
int oldCapacity = elementData.length;
59.
60.
int newCapacity = oldCapacity +
(oldCapacity >> 1);
61.
62.
if (newCapacity - minCapacity < 0)
63.
64.
newCapacity = minCapacity;
65.
66.
if (newCapacity - MAX_ARRAY_SIZE >
0)
67.
68.
newCapacity = hugeCapacity(minCapacity);
69.
70.
// minCapacity is usually close to size so
this is a win:
71.
72.
elementData = Arrays.copyOf(elementData
newCapacity);
73.
74.
}
1.2lixxxxnkedList
同样,我们打开lixxxxnkedList的源文件,不难看到lixxxxnkedList是在一个链表中存储元素。
在学习数据结构的时候,我们知道链表和数组的最大区别在于它们对元素的存储方式的不同
导致它们在对数据进行不同操作时的效率不同,同样,ArrayList与lixxxxnkedList也是如此,
实际使用中我们需要根据特定的需求选用合适的类,如果除了在末尾外不能在其他位置插入