java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的。
常用的集合类型如下:
Collection(一个Collection代表一组Object,Java SDK不提供直接继承自Collection的类,Java SDK提供的 类都是继承自Collection的“子接口”)
├List(元素有放入顺序,元素可重复,用来处理序列)
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set(元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的 HashCode决定的,其位置其实是固定的),用来处理集)
Map(元素按键值对存储,无放入顺序,存储的是键值对)
├Hashtable(线程安全,多线程下低效,不支持null)
├HashMap(非线程安全,多线程下高效,支持null)
└WeakHashMap(以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目)
linkedlist是链表类型,链表增删快,查找慢;ArrayList(非线程安全的,多线程情况下效率高)、Vector(线程安全的,多线程情况下效率低)是数组类型,数组增删慢,查找快;Stack(栈,后进先出,只能在一端进行插入)既可以用数组实现也可以用链表实现。HashSet(底层由HashMap实现),LinkedHashSet SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)。
hashmap,hashtable,WeakHashMap底层数据结构是一个“链表的数组”的数据结构,每个元素存放链表头结点的数组,即数组和链表的结合体。对数据的存取都是通过Key的hashcode值(内存中的地址),速度很快时间复杂度为常数。
数据结构如下图: