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是针对集合操作的工具类,有对集合进行排序和二分查找的方法。

原文地址:https://www.cnblogs.com/xp2h/p/12519520.html