List、Map、Set三个接口,存取元素时,各有什么特点?

Set集合是最接近Collection的集合,因此Set集合几乎没有在Collection增加什么方法。Set集合代表了集合元素无序、几何元素不允许重复的集合。

List集合则在Collection的基础上为元素增加了索引的特性,因此List集合代表了集合元素有序、集合元素可以重复的集合。

Map则代表了存放key-value对的集合,程序可以通过key来获取其中的value

Set集合来说,对于开发者而言,它的集合元素是无序的,似乎显得有些杂乱、无规律,但对计算机而言这不可能,因此计算机需要快速存、取Set集合中的元素。Set集合有两个实现类:HashSetTreeSet,其中HashSet底层其实使用了一个数组来存放所有集合元素,然后通过Hash算法来决定每个集合元素在底层数组中存放位置,因此HashSet对集合元素的存、取就是Hash算法+数组存、取——也就是说只比数组存、取多了些Hash算法开销,因此性能非常快。TreeSet底层则完全是一个红黑树,因此红黑树是折衷平衡的排序二叉树,它底层没有数组开销,存、取元素时都是基于红黑树算法的,因此性能也不错。

对于List集合而言,主要有两个实现:ArrayListLinkedList,其中ArrayList底层是基于数组的,而且ArrayList存、取元素本身就是通过元素索引来进行的,因此ArrayList对元素的存、取性能非常好,几乎等同于存、取数组元素。但则添加、删除元素时需要对数组元素进行“整体搬家”,因此添加、删除元素时性能较差。而LinkedList底层则是基于一个链表实现的,当从链表中存、取元素时,需要定位元素的位置,系统开销较大。但添加、删除元素时,只要修改元素的引用(相当于指针)即可,因此性能非常好。

对于Map集合而言,其底层存、取性能与Set集合完全一样。其实Set集合本身就是基于Map实现的——如果我们把Map集合的所有value都当成空对象处理、只考虑Map集合的keyMap集合就变成了Set集合。换个角度来看,如果我们向Set集合中添加的对象是key-value所组成的Entry对象,那么Set集合也就变成了Map集合。

Java Program!
原文地址:https://www.cnblogs.com/programb/p/14068513.html