*集合总结*
集合的概念
对象的容器,和数组类似,定义了对多个对象进行操作的常用方法。
List集合:
有序、有下标、元素可以重复。(ArrayList、LinkedList、Vector)
ArrayList:有序、有下标、元素可以重复
ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。
添加基本数据类型的时候会自动装箱;要想新new出来的对象是否和集合中现有的对象重复,要重 写实体类中的Object的toString方法。
LinkedList:存储结构:双向链表,链表结构实现,增删改快,查询慢。常用的方法基本上和ArrayList的是相同的。
Vector:存储结构是数组,该集合允许添加重复的元素。Vector比ArrayList先存在,Vector是同步的,Vector的对象是线程安全的;ArrayList是异步的,ArrayList的对象不是线程安全的。同步影响执行效率,所以ArrayList比Vector性能好,而在实际项目开发中,我们一般情况下也是使用ArrayList的时候比较多。
Set集合
无序、无下标、元素不可重复。(HashSet、TreeSet、(LinkedHashSet是有序的))
HashSet:存储结构:哈希表(数组+链表+红黑树),HashSet是基于HashMap实现的。
存储过程:(这也是判断元素重复的依据)(1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步。
(2)再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表。
注意:hashcode方法和equals方法必须都同时重写才行,重写其中一个都是不能实现是否为同一个对象的判断逻辑。
最后是既有数组又有链表。
TreeSet:存储结构:红黑树 左边的节点都要比右边的节点要小
compareTo方法的返回值为0,则认为是重复元素则不能添加进来了,在添加元素的时候要实现comparable接口才行,否则会报类型转换异常。当添加基本数据类型的时候,不用实现Comparable接口或者自定义Comparator.
LinkedHashSet:视频上没有讲解,百度上说LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。
Map集合
存储一堆数据,无序、无下标,键不可以重复,值是可以重复的。(HashMap、HashTable、TreeMap)
HashMap:存储结构:哈希表(数组+链表+红黑树)
怎样去重复:使用key的hashcode和equals方法作为判断重复的依据的
HashTable:实现原理和HashMap相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用.HashTable是线程安全的,HashMap是线程不安全的,而且在实际的项目开发中,HashTable基本上不怎么使用。从JDK的发展历史来看,HashTable出现的时间要比HashMap早。
Collections
集合工具类,定义了除了存取以外的集合常用方法。