zoukankan      html  css  js  c++  java
  • Java 基础

    Set 集合

    Set 集合通常不能记住元素的添加顺序。Set 集合不允许包含相同的元素。

    • HashSet 是 Set 接口的实现类,按照 Hash 算法存储集合中的元素。HashSet 不是同步的,如果多个线程同时访问一个 HashSet,则必须通过代码来保证其同步。集合元素值可以是 null。
    • LinkedHashSet 是一个 HashSet 的子类,也是根据元素的 hashcode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这样使得看起来是以插入顺序保存的。因为需要维护元素的插入顺序,因此性能略低于 HashSet 的性能。
    • TreeSet 是 SortedSet 接口的实现类,正如 SortedSet 名字所暗示的,TreeSet 可以确保集合元素处于排序状态。TreeSet 采用「红黑树」的数据结构来存储集合元素。TreeSet 支持两种排序方法:自然排序和定制排序。如果试图将一个对象添加到 TreeSet 时,该对象的类必须实现 Comparable 接口,否则,程序将会抛出 ClassCastException 异常。TreeSet 只能添加同一种类型的对象。
    • EnumSet 是专门为枚举类设计的集合类,EnumSet 的集合元素也是有序的,以枚举值在 Enum 类内的定义顺序决定集合元素的顺序。EnumSet 集合不允许加入 null 元素。

    Set 实现类的性能分析

    HashSet 和 TreeSet 是 Set 中两个典型的实现,HashSet 性能总是比 TreeSet 好,因为 TreeSet 需要额外的红黑树算法维护集合元素的次序。但需要保持排序的 Set 时,才应该使用 TreeSet,否则都应该使用 HashSet。

    HashSet 还有一个子类:LinkedHashSet。对于普通的插入、删除操作,LinkedHashSet 比 HashSet 要略微慢一点,这是由于维护链表所带来的开销造成的。但是由于有了链表,遍历 LinkedHashSet 会更快。

    EnumSet 是所有 Set 实现类中性能最好的。

    需要注意的是: Set 的三个实现类 HashSet TreeSet EnumSet 都是线程不安全的。通常可以通过 Collections 工具类的 synchronizedSortedSet 方法来包装 Set 集合。此操作最好在创建时进行,防止对 Set 集合意外的非同步访问。

    List 集合

    List 集合代表一个元素有序、可重复的集合。索引从0开始。

    • void add(int index, Object element) 将元素插入到 List 集合的 index 处
    • boolean addAll(int index, Collection c) 将集合 c 所包含的元素插入到 List 集合的 index 处
    • Object get(int index) 返回集合 index 索引处的元素
    • int indexOf(Object o) 返回对象 o 在 List 集合中第一次出现的位置索引
    • int lastIndexOf(Object o) 返回对象 o 在 List 集合最后一次出现的位置索引
    • Object remove(int index) 删除并返回 index 索引处的元素
    • Object set(int index, Object element) 将 index 索引处的元素替换为 element 对象,返回被替换的旧元素。这里的 index 不能超出已有的索引长度
    • LIst subList(int fromIndex, int toIndex) 返回从索引 fromIndex (包含) 到索引 toIndex (不包含)处所有的集合元素组成的子集合。果然,超出了索引,就会报错 java.lang.IndexOutOfBoundsException
    • void replaceAll(UnaryOperator operator) 根据 operator 指定的计算规则重新设置 List 集合的所有元素
    • void sort(Comparaotr c) 根据 Comparator 参数对 List 集合的元素排序

    各种线性表的性能分析

    List 就是一个线性表的接口,而 ArrayList、LinkedList 又是线性表的两种典型:基于数组的线性表和基于链的线性表。Queue 代表了队列,Deque 代表了双端队列(既可以作为队列使用,也可以作为栈使用)。

    LinkedList 集合不仅提供了 List 的功能,还提供了双端队列、栈的功能。

    数组以一块连续内存保存所有的数组元素,所以数组在随机访问时性能最好;内部以链表作为底层实现的集合在执行插入、删除操作时有较好的性能。总体来讲,ArrayList 性能要比 LinkedList 的性能要好,因此,大部分时候使用都应该考虑使用 ArrayList。

    Map 集合

  • 相关阅读:
    Leetcode题解(十六)
    Leetcode题解(十五)
    Leetcode题解(十四)
    Leetcode题解(十三)
    Leetcode题解(十二)
    Leetcode题解(十一)
    php数据库访问及增删改
    克隆对象及加载类
    抽象
    PHP继承
  • 原文地址:https://www.cnblogs.com/michael-xiang/p/10527428.html
Copyright © 2011-2022 走看看