最近特意为了巩固Java基础,找了一些基础的Java书学习了一下,现在写一写我在学习Java过程中对于Java集合框架的一些经历。
Java集合框架主要包括三种类型的集合:Set(规则集),List(线性表),Queue(队列)
大体上是,Set存储一组不重复的元素,List存储一个有序集合,Queue存储先进先出方式的数据集
我们先看看他们在Java中继承的结构
根接口为Collection,它提供了一些对集合的基本操作,如添加或删除元素
具体提供的方法可以看图,我就不一 一说了。
那么我们现在看看有关Set的一些特性和结构。
Set:
Set是一个接口,它扩展了Collection接口,但是确保了它的实现类TreeSet,HashSet不包含重复元素.
HashSet:
HashSet(散列集)是Set的实现类,所以有Set的特性,不可插入重复元素。它的基本结构是多组键值对<Key,Value>,存入的对象必须以一种正确分散散列码的方式实现hasCode方法。
它的继承结构如下:
HashSet随机存入一组不重复元素(存储顺序和插入顺序无关),如果要求存储顺序和插入顺序一致,LinkedHashSet可以满足要求
LinkedHashSet:
LinkedHashSet(链式散列集)用链表来扩展HashSet类,它可以按照插入顺序来提取元素。
注:如果对插入顺序没有特殊要求,建议使用HasheSet因为它比LinkedSet更加高效。
TreeSet:
TreeSet(树形集)是实现SortedSet接口的具体类,顾名思义可以知道它可以对规则集进行有序插入。每当插入一个或一组无序的元素,它会对所有元素进行排序。为了提高效率,你可以用其他集合接收元素,然后用TreeSet对构造方法构造TreeSet,这样就只进行一次排序。
接下来看看List。
List:
List接口扩展了Collection接口,允许集合存储重复元素。通过下标访问元素。
它的一些方法如下:
ArrayList:
动态创建数组,当元素个数超过容量时,创建更大的数组。ArrayList除了在末尾之外,不能再其他位置插入或删除元素。
LinkedList:
LinkedList是实现List接口的一个链表。它可以从线性表两端提取,插入和删除元素。
它的一些方法有:
Vector:
Vector(向量)类实现了List接口,与ArrayList不同之处在于它提供了同步的方法,用于防止多线程同时访问某个向量造成数据损坏。
它的一些方法有:
Stack:
栈类Stack是Vector的扩展类,增加了一些方法
上述集合大概的遍历方法有三种:for ,foreach ,Iterator(迭代器)
我们需要了解的还有Collections类对于线性表和集合提供的一些静态方法,看看以下的API:
性能比较:
对于Set和List,一般Set的性能远远高于List。
而HashSet > LinkedHashSet > TreeSet
ArrayList > LinkedList
Queue:
Queue接口用附加的插入,提取和检验操作来扩展Collection接口。
Deque:
双端队列Deque接口扩展自Queue接口,它支持在队列两端插入和删除元素。LinkedList实现了该接口。
PriorityQueue:
PriorityQueue类实现了一个优先队列。默认情况下,它使用Comparable接口以元素的自然顺序进行排序。最小的数值的元素拥有最高的优先级。
其他的还有Map(图)的一些知识,可以自行补充。