文章

ListSet

ListSet

Java 集合框架

bmll2

List

LinkedList

见队列中 LinkedList 介绍

ArrayList 和 LinkedList

ArrayList 和 Linkedlist 区别?

ArrayList

  1. 优点:ArrayList 是基于动态数组实现的,地址连续,查询操作效率高
  2. 缺点:因为地址连续,ArrayList 要移动数据,所以插入和删除操作效率比较低

LinkedList

  1. 优点:LinkedList 是基于链表的,地址是任意的,不需要连续的内存地址空间,对新增和删除操作比 ArrayList 效率高。LinkedList 适用于要头尾操作或插入指定位置的场景
  2. 缺点:LinkedList 要移动指针,查询操作性能比较低

适用场景

  • 对数据进行快速访问的情况下用 ArrayList;对数据进行多次增删修改时用 LinkedList

ArrayList 和 LinkedList 初始化容量是多少?如何扩容的?

  • ArrayList 初始容量为 10,可在初始化时指定容量,避免动态扩容的开销;ArrayList 扩容规则是,扩容后的大小=原始大小 + 原始大小/2+1(比如原始 10,扩容后 10+5+1=16)
  • LinkedList 是一个双向链表,没有初始化大小,也没有扩容机制,就是一直在前或后面新增节点

Set

HashSet 和 TreeSet

TreeSet
TreeSet 是基于红黑树实现的,TreeSet 中的数据是自动排好序的,不允许放 null;底层实现是 TreeMap
HashSet
HashSet 是基于哈希表实现的,HashSet 中的数据是无序的可以放入 null,但只能放入一个 null;HashSet 要求放入的对象必须实现 hashCode 方法,因为放入的对象是以 hashCode 码作为标识的;底层实现是 HashMap
适用场景
HashSet 基于 hash 算法实现的,性能通常由于 TreeSet,为快速查找而设计的,一般情况下我们都应该使用 HashSet;只有需要排序时,才使用 TreeSet

CopyOnWriteArraySet

本文由作者按照 CC BY 4.0 进行授权