Collection集合
1、什么是集合
集合是一个大小可变的容器,Collection是单列集合,一个元素只能一个值。
2、子类
2.1 List集合 - 添加的元素是有序,可重复,有索引
实现类:
ArrayList(常用):底层结构基于数组,查询快,增删慢;线程不安全,效率高;
LinkedList常用):底层结构基于链表,增删快,查询慢;线程不安全,效率高;支持双链表,定位首尾速度也快;
Vector(基本不用):底层结构是数组,查询快,增删慢;线程安全,效率低;
2.2 Set集合 - 添加的元素是无序,不重复,无索引的,增删改查的性能都很好
实现类:
HashSet常用):添加的元素是无序,不重复,无索引的;
LinkedHashSet:添加的元素是有序,不重复,无索引的;
TreeSet:按照大小默认升序排序,不重复,无索引;
扩展1:Set集合为什么可以去重?
1、元素本身就有值特性的,字符或者数值类型;
2、对于引用类型,先通过hashcode()得到彼此的hash值(所谓的内存地址)比较,如果hash值相同,会让两个对象进行equals比较;
扩展2:HashSet底层结构
JDK 1.8 之前 哈希表 = 链表 + 数组 + (哈希算法);
JDK 1.8 之后 哈希表 = 链表 + 数组 + 红黑树 +(哈希算法)当链表长度超过阈值8时会转为红黑树结构;
3、常用方法
#添加功能 boolean add(E e); boolean addAll(Collection c); #删除功能 void clear(); boolean remove(E e); #判断功能 boolean contains(E e); boolean containsAll(Collection c); boolean isEmpty(); #获取迭代器进行遍历集合 Iterator<E> iterator(); #交集功能 boolean retainAll(Collection c); #长度功能 int size(); #把集合转换为数组 Object[] toArray();
4、Collections工具类
针对集合操作的工具类,都是静态方法;
4.1 常用方法
#排序 sort(List<T> list); #查找 int binarySearch(List<T> list ,T key);//二分查找 T max(Collection<?> coll); #反转 reverse(List<?> list); #随机置换 shuffle(List<?> list);
4.2 扩展:Collection和Collections的区别?
Collection是单列集合的顶层接口,有子接口List和Set;
Collections是针对集合操作的工具类,有对集合进行排序和二分查找的方法。