java中map的数据结构_Java中常见数据结构:list与map -底层如何实现

本文详细介绍了Java集合框架中的ArrayList、Vector、LinkedList、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap和Hashtable的特性,包括它们的底层数据结构、增删查改效率、线程安全性和排序方式。在选择集合时,应考虑是否键值对、元素唯一性、排序需求及线程安全性等因素。同时,列举了集合的常用方法和遍历方式,提供了选用集合的实用原则。

1:集合

2 Collection(单列集合)

3 List(有序,可重复)

4 ArrayList

5 底层数据结构是数组,查询快,增删慢

6 线程不安全,效率高

7 Vector

8 底层数据结构是数组,查询快,增删慢

9 线程安全,效率低

10 LinkedList

11 底层数据结构是链表,查询慢,增删快

12 线程不安全,效率高

13 Set(无序,唯一)

14 HashSet

15 底层数据结构是哈希表。

16 哈希表依赖两个方法:hashCode()和equals()

17 执行顺序:

18 首先判断hashCode()值是否相同

19 是:继续执行equals(),看其返回值

20 是true:说明元素重复,不添加

21 是false:就直接添加到集合

22 否:就直接添加到集合

23 最终:

24 自动生成hashCode()和equals()即可

25

26 LinkedHashSet

27 底层数据结构由链表和哈希表组成。

28 由链表保证元素有序。

29 由哈希表保证元素唯一。

30 TreeSet

31 底层数据结构是红黑树。(是一种自平衡的二叉树)

32 如何保证元素唯一性呢?

33 根据比较的返回值是否是0来决定

34 如何保证元素的排序呢?

35 两种方式

36 自然排序(元素具备比较性)

37 让元素所属的类实现Comparable接口

38 比较器排序(集合具备比较性)

39 让集合接收一个Comparator的实现类对象

40 Map(双列集合)

41 A:Map集合的数据结构仅仅针对键有效,与值无关。

42 B:存储的是键值对形式的元素,键唯一,值可重复。

43

44 HashMap

45 底层数据结构是哈希表。线程不安全,效率高

46 哈希表依赖两个方法:hashCode()和equals()

47 执行顺序:

48 首先判断hashCode()值是否相同

49 是:继续执行equals(),看其返回值

50 是true:说明元素重复,不添加

51 是false:就直接添加到集合

52 否:就直接添加到集合

53 最终:

54 自动生成hashCode()和equals()即可

55 LinkedHashMap

56 底层数据结构由链表和哈希表组成。

57 由链表保证元素有序。

58 由哈希表保证元素唯一。

59 Hashtable

60 底层数据结构是哈希表。线程安全,效率低

61 哈希表依赖两个方法:hashCode()和equals()

62 执行顺序:

63 首先判断hashCode()值是否相同

64 是:继续执行equals(),看其返回值

65 是true:说明元素重复,不添加

66 是false:就直接添加到集合

67 否:就直接添加到集合

68 最终:

69 自动生成hashCode()和equals()即可

70 TreeMap

71 底层数据结构是红黑树。(是一种自平衡的二叉树)

72 如何保证元素唯一性呢?

73 根据比较的返回值是否是0来决定

74 如何保证元素的排序呢?

75 两种方式

76 自然排序(元素具备比较性)

77 让元素所属的类实现Comparable接口

78 比较器排序(集合具备比较性)

79 让集合接收一个Comparator的实现类对象

80

81 2.关于集合选取原则

82

83 是否是键值对象形式:

84 是:Map

85 键是否需要排序:

86 是:TreeMap

87 否:HashMap

88 不知道,就使用HashMap。

89

90 否:Collection

91 元素是否唯一:

92 是:Set

93 元素是否需要排序:

94 是:TreeSet

95 否:HashSet

96 不知道,就使用HashSet

97

98 否:List

99 要安全吗:

100 是:Vector

101 否:ArrayList或者LinkedList

102 增删多:LinkedList

103 查询多:ArrayList

104 不知道,就使用ArrayList

105 不知道,就使用ArrayList

106

107 3:集合的常见方法及遍历方式

108 Collection:

109 add()

110 remove()

111 contains()

112 iterator()

113 size()

114

115 遍历:

116 增强for

117 迭代器

118

119 |--List

120 get()

121

122 遍历:

123 普通for

124 |--Set

125

126 Map:

127 put()

128 remove()

129 containskey(),containsValue()

130 keySet()

131 get()

132 value()

133 entrySet()

134 size()

135

136 遍历:

137 根据键找值

138 根据键值对对象分别找键和值

139

48304ba5e6f9fe08f3fa1abda7d326ab.png

1:集合(自己补齐)

Collection(单列集合)

List(有序,可重复)

ArrayList底层数据结构是数组,查询快,增删慢线程不安全,效率高Vector底层数据结构是数组,查询快,增删慢线程安全,效率低LinkedList底层数据结构是链表,查询慢,增删快线程不安全,效率高Set(无序,唯一)

HashSet底层数据结构是哈希表。哈希表依赖两个方法:hashCode()和equals()执行顺序:首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是true:说明元素重复,不添加是false:就直接添加到集合否:就直接添加到集合最终:自动生成hashCode()和equals()即可LinkedHashSet底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素唯一。

TreeSet底层数据结构是红黑树。(是一种自平衡的二叉树)如何保证元素唯一性呢?

根据比较的返回值是否是0来决定如何保证元素的排序呢?两种方式自然排序(元素具备比较性)让元素所属的类实现Comparable接口比较器排序(集合具备比较性)让集合接收一个Comparator的实现类对象Map(双列集合)A:Map集合的数据结构仅仅针对键有效,与值无关。B:存储的是键值对形式的元素,键唯一,值可重复。

HashMap底层数据结构是哈希表。线程不安全,效率高哈希表依赖两个方法:

hashCode()和equals()执行顺序:首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是true:说明元素重复,不添加是false:就直接添加到集合否:就直接添加到集合最终:自动生成hashCode()和equals()即可LinkedHashMap底层数据结构由链表和哈希表组成。由链表保证元素有序。由哈希表保证元素唯一。

Hashtable底层数据结构是哈希表。线程安全,效率低哈希表依赖两个方法:

hashCode()和equals()执行顺序:首先判断hashCode()值是否相同是:继续执行equals(),看其返回值是true:说明元素重复,不添加是false:就直接添加到集合否:就直接添加到集合最终:自动生成hashCode()和equals()即可TreeMap底层数据结构是红黑树。(是一种自平衡的二叉树)如何保证元素唯一性呢?根据比较的返回值是否是0来决定如何保证元素的排序呢?两种方式自然排序(元素具备比较性)让元素所属的类实现Comparable接口比较器排序(集合具备比较性)让集合接收一个Comparator的实现类对象

2:到底使用那种集合(自己补齐)看需求。

是否是键值对象形式:是:Map键是否需要排序:是:TreeMap否:HashMap不知道,就使用HashMap。否:Collection元素是否唯一:是:Set元素是否需要排序:是:TreeSet否:HashSet不知道,就使用HashSet否:    List要安全吗:是:Vector(其实我们也不用它,后面我们讲解了多线程以后,我在给你回顾用谁)   否:ArrayList或者LinkedList增删多:LinkedList查询多:ArrayList不知道,就使用ArrayList不知道,就使用ArrayList3:集合的常见方法及遍历方式Collection:add()remove()contains()iterator()size()遍历:增强for迭代器|--Listget()遍历:普通for|--SetMap:put()remove()containskey(),containsValue()keySet()get()value()entrySet()size()遍历:根据键找值根据键值对对象分别找键和值作业:我讲解过的任意一个集合,我要求你存储什么,你就能够存储什么。并且,还要能够遍历出来。

4:ArrayList,LinkedList,HashSet,HashMap(掌握)存储字符串和自定义对象数据并遍历5:集合的嵌套遍历(理解)

注:

1.其中的Arralist  代码中大量的用了System.arraycopy () 方法 进行数组进行复制

System.arraycopy(elementData, index+1, elementData, index,

numMoved);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值