一.Set集合介绍:
1.HashSet集合特点
底层数据结构是哈希表对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致没有带索引的方法,所以不能使用普通for循环遍历。
由于是Set集合,所以是不包含重复元素的集合。
2.LinkedHashSet集合概述和特点LinkedHashSet集合特点
哈希表和链表实现的Set接口,具有可预测的迭代次序。
由链表保证元素有序,也就是说元素的存储和取出顺序是一致的由哈希表保证元素唯一,也就是说没有重复的元素。
3.TreeSet集合特点
元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法TreeSet0:根据其元素的自然排序进行排序
TreeSet(Comparatorcomparator):根据指定的比较器进行排序
. 没有带索引的方法,所以不能使用普通for循环遍历
由于是Set集合,所以不包含重复元素的集合
二.List集合介绍:
List有序集合也称为序列。该界面的用户可以精确的控制列表中每个元素的插入位置。用户可以通过整数索引访问元素。并搜索列表中的元素。
List集合与Set集合不同,列表通常允许重复元素。
java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
List接口特点:
1.它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
2.它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
3.集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
tips:我们在基础班的时候已经学习过List接口的子类java.util.ArrayList类,该类中的方法都是来自List中定义。
ArrayList底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。
LinkedList底层用双向链表实现存储
特点:增删效率高,查询效率低,线程不安全
双向链表也叫双链表,是链表的一种,它的每个数据节点都有两个指针,分别指向前一个节点和后一个节点。
ArrayList和LinkedList的区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
2.对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
他们在性能上的有缺点:
1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是 统一的,分配一个内部Entry对象。
2.在ArrayList集合中添加或者删除一个元素时,当前的列表所所有的元素都会被移动。而LinkedList集合中添加或者删除一个元素的开销是固定的。
3.LinkedList集合不支持 高效的随机随机访问(RandomAccess),因为可能产生二次项的行为。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
所以在我们进行对元素的增删查操作的时候,进行 查操作时用ArrayList,进行增删操作的时候最好用LinkedList。
三.Map集合介绍:
HashMap的实现原理
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。(其实所谓Map其实就是保存了两个对象之间的映射关系的一种
简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
Map
特点:无序、以键值对的形式添加元素,键不能重复,值可以重复
它没有继承Collection接口
Map和HashMap区别:
1、Map是一个接口,HashMap继承AbstractMap接口和实现了Map接口的类;
2、Map是存储键和值这样的双列数据集合,但存储的数据是没有顺序的,其键不能重复,但其值是可以重复的,可以通过每一个键找到每一个对应的值;HashMap线程不同步的,即线程不安全的,但只有一个线程访问时效率较高;