简述java集合中List集合和Set集合
集合
概述
容器技术,数组、向量Vector、哈希表Hashtable、 字典Dictionary、枚举Enumeration、 属性列表Properties
java集合体系结构
Collection接口下: List接口(有序[存储顺序],元素可重复) 和 Set接口(无序,元素不可 重复)
Set集合是如何保证元素不重复? 根据equals和hashcode判断,一个自定义对象要存储在Set中,必 须重写equals和hashCode方法
Collection接口和Map接口: Map是对Collection的补充,两个没什么关系
Map存储是<k,v> 键值对
Collection存储是 单个值
List接口的实现类: ArrayList、LinkedList、Vector
Set接口的实现类: HashSet、TreeSet、LinkedHashSet
Map接口的实现类: HashMap、TreeMap、Hashtable
List接口
ArrayList
LinkedList
Vector
ArrayList
1.底层通过数组实现
2.数组初始容量为10(不是new就是10,在第1次执行add方法的时候)
3.内部通过数组拷贝实现扩容,当容量超出时,会扩容为原来的1.5倍
4.线程不安全(不同步)JDK1.5版本设计一个CopyOnWriteArrayList
5.数组一旦创建不能改变,因此在非末端插入和删除数据的时候,由于可能会涉及到到数组拷贝问题,因此修改和删除效率比较低。
LinkedList
1.底层通过双向链表实现
元素是通过首尾指针连接,在进行修改(新增、删除)元素的时候只需要修改
指针即可,一般情况修改效率要比ArrayList高,但是在查询时,LinkedList比ArrayList效率低,链
表从第1个元素开始依次向后搜索。
2.比较适合数据的动态插入和删除
3.随机访问和遍历速度比较慢.
Vector
1.底层通过数组实现,早期集合类JDK1.0
2.线程安全
3.淘汰 -单线程环境建议使用ArrayList,多线程环境建议使用CopyOnWriteArrayList
Set集合
特点:
无序(不是按照存储顺序存储的)
不可重复(底层会调用equals方法,若返回true则不能存入相同的元素) Set集合存入自定义类型,则必须要重写 equals和hashCode方法
HashSet
HashSet集合,采用哈希表数据结构存储数据,保证元素的唯一性依赖的方法 equals() 和 hashCode()
LinkedHashSet
HashSet 保证元素的唯一性,有保存了插入时的顺序;
TreeSet
TreeSet 存储的元素,,元素的数据类型必须实现 Comparable接口比较器
特点: 底层会调用这个接口中比较的方法 compareTo方法进行比较排序 会对元素进行排序