java collection key_java集合--collection集合

1、画出collection的框架图

集合主要包含collection和map两个接口。其中collection中的元素是一个value值,map中的元素是key:value形式的。

collection包含set、list、queue。

(1)list:list接口包含ArrayList,Vector,LinkedList。

(2)set包含HashSet,TreeSet,EnumSet。

(3)Queueu包含LinkedList,PriorityQueue

map包含HashMap,HashTable,TreeMap,WeakHashMap,IdentityHashMap,EnumMap

6955eacba2032411eaa6310cbcd9f90c.png

2、详述List、Map、Set的区别?(底层实现的数据结构不同)

(1)List:有序,可重复。

ArrayList:底层实现的数据结构是数组,查询快,增删慢。线程不安全,效率高

LinkedList:底层实现的数据结构是链表,查询慢,增删块。线程不安全,效率高

Vector:底层实现的数据结构是数组,查绚块,增删慢。线程安全,效率低。

(2)Set:无序,唯一。

HashSet:底层数据结构是哈希表(无序,唯一)。保证元素唯一性依赖于两个方法:hashCode()和equals()

LinkedHashSet:底层数据结构是链表和哈希表。(FIFO,有序,唯一)。通过链表保证有序性, 通过哈希表保证唯一性。

TreeSet:底层数据结构是红黑树。(唯一,有序)

一般。ArrayList和HashSet用的比较广泛。如果明确知道需要线程安全或者有序,就根据集合的具体特点选择使用哪一个集合。Set和List都是单列元素的集合,父接口都是Colelction,有一定的相似之处。

List表示有先后顺序的集合, 按元素先来后到的元素进行插入,当然,可以插队,使用add(int index,object e)指定元素的位置。其实并不是把对象本身存储在集合里,而是在集合中用一个索引变量指向这个对象,当集合中包含多个同样的对象时,是多个索引指向同一个对象。List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。

Set里面不允许有重复的元素,即不能有两个相等(注意,不是仅仅是相同equals)的对象。所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。

(3)Map中常用的是Hash Map,HashMap,HashTable,TreeMap。

TreeMap:有序

HashMap:无序,线程不安全,效率高

HashTable:无序,线程安全,效率低。

HashMap和hashTable的区别:

Hashtable不允许null值,HashMap允许null值(key和value都允许)

Hashtable是Java1.1的一个类,它基于陈旧的Dictionary类。而HashMap是Java1.2引进的Map接口的一个实现。

Hashtable是线程安全的,而HashMap是线程不安全的。如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。

Map和List、Set不同,是双列元素的集合,不允许重复的key(equals),通过put(obj key,obj value)将元素存储到map集合中。取值时通过get(Object key),或者通过map.keySet(),map.values(),map.entrySet()获得keys,values的信息。

总结:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

3、List时如何扩容的?

lsit初始化的长度是10,当长度达到10时,再新增数据会进行扩容。每次扩容为1.5倍+1,并将之前的数据copy到新的array中去。发现不同jdk是不一样的,关于(1.5倍+1)出现在jdk1.6,其他1.7和1.8都是(1.5倍扩容)。

4、HashSet的底层实现是?

HashMap,主要利用了HashMap的键不可重复的特性。

5、Iterator的机制?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值