java集合(一)集合总纲

一、数组和集合的比较

数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下:

  1. 数组能存放基本数据类型和对象,而集合类存放的都是对象,集合类不能存放基本数据类型。数组和集合存放的对象皆为对象的引用地址。
  2. 数组容易固定无法动态改变,集合类容量动态改变。
  3. 数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数
  4. 集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式
  5. 集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率

二、集合分类

Java集合分类:

  • List
  • Set
  • Map
  • Queue
  • 数组
  • 工具类
  • 扩展类

List:

  • ArrayList :动态数组。
  • LinkedList:双向链表。
  • Vector:线程安全的动态数组。
  • Stack:对象栈,遵循先进后出的原则。

Set:

  • EnumSet:枚举类型专用Set,所有元素都是枚举类型。
  • HashSet:以哈希码决定元素位置的set
  • TreeSet:插入时会自动排序的set,但是如果中途修改元素大小,则不会再修改后重新排序,只会在插入时排序。
  • LinkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

Map:

  • TreeMap :自动排序map,根据key值自动排序。
  • HashMap:Entry数组,以key的哈希码决定元素位置,所以,要保证key的哈希码不一致,如果碰到值不同但哈希码相同的key,会以单向链表扩展
  • HashTable:线程安全的
  • WeakHashMap: 和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。不过WeakHashMap的键是“弱键”。
  • Properties:HashTable的子类,从Property文件中加载数据,并提供方便的读写操作。
  • EnumMap:Key必须是枚举类型。

Queue:

  • 阻塞式队列,满了以后再插入元素会抛出异常;
    • ArrayBlockingQueue :以数组方式实现。
    • PriorityBlockingQueue:依照优先级组件的队列。
    • LinkedBlockingQueue:通过链表实现。
    • DelayQueue: 优先级队列实现的无界阻塞队列。
    • SynchronousQueue: 不存储元素的阻塞队列, 每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。
    • LinkedTransferQueue: 链表实现的无界阻塞队列。
    • LinkedBlockingDeque: 链表实现的双向阻塞队列。
  • 非阻塞队列,无边界,只要内存允许,可以持续追加。
    • PriorityQueue
  • 双端队列,支持在头尾两端插入和移除元素。而上面的阻塞队列和非阻塞队列都时单端队列,只能在一端插入,另一端删除。
    • ArrayDeque
    • LinkedBlockingDeque
    • LinkedList

工具类:

  • 数组工具类
    • java.util.Arrays
    • java.lang.reflect.Array
  • 集合工具类
    • java.util.Collections

扩展类:
可以自己写一个List,或使用第三方实现例如:

  • Apache的Commons-collections扩展包
  • Google的google-collections扩展包
posted @ 2019-12-15 14:30  跃小云  阅读(283)  评论(0编辑  收藏  举报