浅谈Java常用集合--Set和List

今天在复习基础的Java知识点的时候,对Collection中的Set和List做了一个简单的汇总。下边的是我的整理,分享出来,也方便自己后期的查询。

先来一张图片,简单看一下Set和List集合
浅谈Java常用集合--Set和List_第1张图片

ListSet是Collection的子类,也是Collection的实现
Collextion是无序的
Set没有对collection进行扩充。即set也是无序的
list对接口进行了扩充,list是有序的。

一、List集合
List包含LinkList、ArrayList、Vector
即LinkList、ArrayList、Vector是List的实现类
常用LinkList、ArrayList。
LinkList是以链表的方式来实现的、
ArrayList是以数组的方式来实现的。

先来看一下数组和链表的区别:
数组:
数组是一种具有固定大小的数据结构,它将相同数据类型的元素在内存中连续存放,可通过下标快速访问数组中的任何元素。适合查询操作,插入和删除元素代价昂贵。
链表:
链表是一种采用链式结构的数据组织形式。它采用动态分配内存的形式实现,需要时可以用new分配内存空间,不需要时用delete释放已分配的空间,不会造成内存空间的浪费。适合插入和删除,查询操作开销较大。

1、从安全角度上考虑:
LinkList、ArrayList(1.2提供),异步处理性能更高。线程不安全,需要加锁来包整线程的安全
Vector(1.0提供)线程安全。同步处理,性能低。
2、访问上:
LinkList选取元素代价高、查找的情况一般需要多次的遍历,一般多用于插入。
ArrayList随机访问效率高,且时间恒定。插入需要开辟空间,对数组存储顺序进行内存移动。
为了提高代码的效率一般来说
ArrayList用于查找数据,进行索引,LinkList用于增删数据
3、在增加时,空间不够:
ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。
4、复杂度:
ArrayList封装的是数组;LinkedList封装的是链表。ArrayList时间复杂度为1,而LinkedList的复杂度为n。

二、Set集合

来看一张Set集合中的方法图片
浅谈Java常用集合--Set和List_第2张图片
HashSet、TreeSet是Set常用的两个实现类
HashSet:无序存储,允许null,有且只有一个null;
TreeSet:有序存储,升序存储,不允许为空。

set集合的两个常用方法:eqals()、hashCode();
hashCode()是将的两个对象多的物理地址.
equals()讲的是两个对象是否相同***

.
根据这个理论知识点我们可以判断出来。
当equals()相等时,hascode()必定相等.
相反hascode()相等时,equals()不一定相等
只有当equals和hascode同时相等时才能判断到两个值相等。

三、List和Set的区别
List和Set都是Collection的子类

两者的区别:

List:
1.可以允许重复的对象。
2.可以插入多个null元素。
3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。
Set:
1.不允许重复对象
2. 无序容器,无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
3. 只允许一个 null 元素
4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。

总结的东西比较简单一些,希望在面试的时候有用。

为自己加一下油,多写一些有用的博客,多实现一些底层的原理,希望能够帮到跟自己一样的初学者。多传递正能量。

你可能感兴趣的:(java)