【Java】常用集合类型梳理

来源:互联网 发布:虾吃虾涮相应数据 编辑:程序博客网 时间:2024/06/18 16:27

本文仅是梳理一下几个常用的集合类,用框图的形式展现其继承层次,以便于理解记忆。更详细的知识点请自行网上搜索。

这里写图片描述

按照继承结构,我们先将这些集合类分为两个系,Collection系和Map系,其实两系之间会有一些穿插。

Collection

Collection用于保存一组对象,允许重复,不保证排序。
再往下划分,List分支加入了【有序】,Set分支加入了【排除重复】。

  1. ArrayList
    ArrayList的内部实现是Object数组,基于此,它的特点如下:
    • 查询速度快,比如get(int)方法是直接使用数组下标操作;
    • 增删会引起内部数组的复制拷贝,因此性能整体上不如LinkedList。add(E)方法在某些时候会引起数组扩容,其性能还可以接受。add(int,E)在非队尾的位置添加元素,性能急剧下降;
  2. LinkedList
    LinkedList内部是由链表数据结构实现的,基于此,它的特点如下:
    • 查询慢,要遍历数据链表,虽然算法上有优化,会选择性的从头部或尾部开始遍历;
    • 增删性能好,因为内部只要改变链表节点指针即可;
  3. HashSet
    HashSet的内部是基于HashMap实现的,HashSet的元素就是内部Map的Key,HashMap的键不允许重复,允许有一个NULL键,这些特性自然就体现在了
    HashSet上。
  4. LinkedHashSet
    LinkedHashSet继承自HashSet,它的构造方法是调用了HashSet中一个非公开的构造方法,选用了LinkedHashMap作为内部实现。其特点是元素的迭代顺序跟插入顺序相同;
  5. TreeSet
    TreeSet的内部实现是TreeMap,保证其元素是有序的。有自然排序和定制排序。它的元素要实现Comparable接口。因为添加元素的时候要做排序比较,所以不允许添加NULL元素;

Map

Map以键值对的形式存储数据,不允许键重复,允许值重复,允许有一个NULL键;数据是不保证顺序的;

  1. HashMap 是一个最常用的Map,存取速度很快,不支持线程的同步;
  2. LinkedHashMap 是HashMap的子类,多了【有序】,元素的迭代顺序跟插入顺序相同,也可以在构造时使用参数,控制是否按照应用次数排序。
  3. TreeMap 保证排序,默认是按键值的升序排序,也可以指定排序的比较器。遍历时得到的记录是排过序的。
  4. ConcurrentHashMap 加强版的HashMap,支持线程同步,性能比HashTable好。多线程环境下选它就是了;

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步;

原创粉丝点击