常用的几种java集合类总结

  • 格式:docx
  • 大小:62.03 KB
  • 文档页数:35

下载文档原格式

  / 111
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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也是如此,

实际使用中我们需要根据特定的需求选用合适的类,如果除了在末尾外不能在其他位置插入