Java学习笔记网

2) Set 和 List 的特点跟区别


导语:Java中的集合包括三大类,它们是Set(集)、List(列表)和Map(映射),它们都处于java.util包中,SetListMap都是接口,它们有各自的实现类。list和set都继承自collection接口,map是单独的最大的接口。集合类存放于java.util包中。

一、关系图

1、List和set的集合结构图

2、List、set和map的关系图

 

二、特点和区别

1、Collection的主要实现类

Iterable
          |<--(I)Collection
                            |<--(I)List
                                         |<<——(C)ArrayList
                                         |<<——(C)LinkedList
                                         |<<——(C)Vector
                            |<--(I)Set
                                         |<<——(C)HashSet
                                         |<<——(C)TreeSet
                            |<--(I)Queue

2、List的特点和实现类

1.可以允许重复的对象。
2.可以插入多个null元素。
3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

3、Set的特点和实现类

 Set:1.不允许重复对象
     2. 无序容器
         3. 只允许一个 null 元素

   4、map的特点和实现类
         |<--(接口)Map
                            |<--(类)HashTable
                            |<--(抽象类)AbstractMap
                                         |<<——(类)TreeMap
                                         |<<——(类)HashMap
 
三、List和set的区别
 
1、List,Set都是继承自Collection接口
2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉
2、set元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法,以确保对象的唯一性
3、支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。
4、Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
     List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
 
 
四、总结
 
ArrayXxx:底层数据结构是数组,查询快,增删慢
LinkedXxx:底层数据结构是链表,查询慢,增删快
HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序