集合框架(一)

集合框架

这里写图片描述

1、Set、Map区别:

Set继承了Collection接口;而Map没有。 
Set具有元素的不重复性;Map保存的是键值对。

  • HashSet是基于HashMap实现的,HashSet存储的值作为HashMap的key值存放,从而保证了值的不重复性,因此HashSet的增删改查也是基于HashMap来实现的。**HashMap允许空的键值对,HashSet允许空的值。**HashSet初始化是可以指定内部HashMap的initialCapacity和loadFactor。
  • LinkedHashSet继承HashSet,它是基于LinkedHashMap实现的。通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素迭代的顺序;所以LinkedHashSet也保证了元素迭代的顺序。LinkedHashMap允许空的键值对,LinkedHashSet允许空的值。
  • TreeSet实现了SortedSet接口,它是基于TreeMap实现的。TreeMap底层是一个红黑树的数据结构,所以TreeMap保证了键的有序性,TreeSet保证了存储的值的有序性。两者的增删改查操作均与红黑树的高度有关,为O(logn)。两者初始化的时候都可以传入comparator或者使用key默认的比较器来作为排序的基准。因为需要排序比较,所以TreeMap不允许空的key但是value可以为空,TreeSet不允许空的值。

2、Set、List区别

Set保证了元素的不重复性,而List允许重复值的存在。当然,它们底层实现不一样,List是基于数组或者链表的数据结构实现的。List允许允许空的值,而Set根据具体的实现类而定。

3、Arraylist、LinkedList区别

Arraylist是基于数组实现的,而LinkedList是基于链表实现的。两者都保证了元素迭代的顺序。

4、HashSet、LinkedHashSet区别

LinkedHashSet继承了HashSet;内部实现等价于HashMap和LinkedHashMap的区别。

5、HashMap、TreeMap、LinkedHashMap

  • HashMap和LinkedHashMap允许空的键值对,而TreeMap不允许空的key,但是允许空的value。
  • HashMap底层是基于数组和链表实现的。LinkedHashMap在HashMap的基础上又维护了一个运行于所有条目的双向链表(在Node上增加两个指针)来保证元素迭代的顺序(即元素插入的顺序)。
  • TreeMap底层是基于红黑树实现的,因为红黑树是一种自平衡二叉查找树,所以TreeMap保证了key的有序性,在TreeMap上增删改查操作均与红黑树的高度有关,为O(logn)。TreeMap的Key按照自然顺序进行排序或者根据创建映射时提供的Comparator接口进行排序。
  • HashMap与LinkedHashMap保证了以O(1)的时间复杂度进行增、删、改、查,从存储角度考虑,这两种数据结构是非常优秀的。另外,LinkedHashMap还额外地保证了Map的遍历顺序可以与put顺序一致,解决了HashMap本身无序的问题。
  • 如果只需要存储功能,使用HashMap与LinkedHashMap是一种更好的选择;如果还需要保证统计性能或者需要对Key按照一定规则进行排序(取出最值等操作),那么使用TreeMap是一种更好的选择。

简单来说,collection的子类如下:
--List:将以特定次序存储元素,所以取出来的顺序可能和放入顺序不同。
--ArrayList:擅长随机访问元素,但在List中间插入、删除、移动元素较慢。
--LinkedList:插入、删除、移动元素方便,随机访问元素差。
--Set:每个值只能保存一个对象,不能含有重复的元素。
--HashSet:使用散列函数。
--TreeSet:使用红黑树。
--LinkedHashSet:使用链表结合散列函数。
--Queue:先进先出的容器。
Map的子类有以下三个:
--HashMap
--HashTable
--TreeMap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值