List集合实现类:
ArrayList LinkedList Vector CopyonWriteArrayList
Set集合实现类:
HashSet——>LinkedHashSet TreeSet
Collection常用方法:
add(Object e) 往集合里放入元素
addAll(Collection c) 往集合里放入集合
remove(Object e) 从集合中移除一个元素
removeAll(Collection c) 从集合中移除多个元素(与移除集合重复的元素正常移除,其他不用管)
clear() 清空集合
contains(Object e) 判断集合中包不包含某一元素
containsAll(Object e) 判断集合中包不包含多个元素(所有都包含才为true)
isEmpty() 判断集合是否为空
size() 取集合的大小
toArrayLiat() 把集合转化为数组
iterator 获取迭代器对象( Iterator it=集合.iterator(); )
List集合
特点:存放的元素是有序的,可以重复
实现类:
ArrayList:底层使用数组,查询快,添加删除慢,线程不安全。
LinkedList:底层使用链表,查询慢,添加删除快,线程不安全。
Vector:在jdk1.2就出现了,比较古老,底层是数组,线程是安全的。
CopyonwriteArrayList:即兼顾了线程安全,又提高了并发性,性能比Vector高,底层使用数组
数组使用线性结构,链表使用链式结构
容量问题
当 总元素个数>原容量*加载因子 就会扩容
ArrayList:
jdk1.6之前,创建时默认容量为10个大小
jdk1.7之后,创建时默认容量为0,当添加第一个元素时,容量变成10
LinkedList:
链表,无初始化大小,无扩容机制
Vector:
底层是数组,线程安全,默认大小为10,扩容为原来1倍
CopyonwriteArrayList:
复制数组,对新数组进行写操作,写完将原容器引用指向新数组
List新增方法
add(int a, Object o) 往某个位置上添一个元素
addAll(int a, Collection c) 往某个位置上添一组元素
get(int a) 根据索引取元素
indexOf(Object o) 查询一个元素在集合中的索引
set(int a, Object 0) 把集合中某个位置上的元素,换成指定的值 ,返回值是指被换出来的那个元素
remove(int a) 移除指定位置上的元素
subList(int a, int b ) 取集合中的一段,和substring很象
iterator() 用来迭代集合 继承Collection得到的
listIterator() 用来迭代集合 list集合特有的
listIterator(n) 用来迭代集合 可以指定索引
listIterator()和iterator()区别:
1:listIterator可以双向遍历,iterator()只能单向
2:listIterator可以定位索引,iterator()不能
3:listIterator可以添加修改数据,iterator()不能,只能删除
添加对象
在List集合中,判断两个对象是否相同,根据对象自己的equals方法,返回为true则相同
附加
Enumeration和Iterator迭代器用法和作用一样的,它只是Vector特有的遍历方式
Stack是栈结构,先进后出。
Set集合
特点:存放的元素是无序的,不可以重复
实现类:
HashSet:无序的,效率高,线程不安全(底层HashMap,HashMap底层用的是 哈希表+红黑树)
TreeSet:可以对元素进行自动排序,线程不安全(底层TreeMap,TreeMap底层用的是 红黑树)
LinkedHashSet:具有先进先出的特点,插入顺序和取出顺序一致,因为链表结构导致(底层LinkedHashMap,LinkedHashMap底层使用的是 双向链表+红黑树+哈希表)
附加:
哈希表默认大小为16,加载因子0.75,扩容1倍
用法:
可以与List互相转换
对象相等判断
List集合进行对象相等判断时,利用的是对象本身的equals方法
HashSet进行对象相等判断时,它首先会判断对象的hashCode方法结果是不是相同,如果相同,再去判断equals方法结果是否为true,如果为true,则任何对象此时相同,所以就会去重
TreeSet 进行对象相等判断时,会调用compareTo 方法,如果为0,就相等
附加:hashCode来自于Object,用于计算对象的hash值(散列值),是一个数字,根据对象的内存以及字段计算得到的,目的是为了配合哈希表使用的(散列表)
Comparable比较器
自定义一个类实现一个接口Comparator
Comparable和Comparator的区别:
一个类实现了 Comparable 接口,则表明这个类的对象之间就具备比较规则,叫做内比较器。而Comparator是一种算法的实现,可以将数据和算法进行分离,叫做外比较器
集合与数组的区别:
1:数组声明的时候需要声明类型,而集合不需要
2:数组一旦创建大小不能改变,而集合不需要
3:数组能装基本数据类型,而集合不行(只能装对应的包装类型)