TreeMap
1、TreeMap的底层是通过红黑树实现的。那么关于红黑树的概念和特性都有哪些?红黑树:又称红-黑二叉树,它首先是一颗二叉树,它具体二叉树所有的特性。同时红黑树更是一颗自平衡的排序二叉树。他的节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡,(AVL树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1)红黑树所要有的性质是:1)节点只有黑和红两种选择且根节点必须为黑,2)每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的,3)如果一个节点为红的,那么他的两个儿子都是黑的,4)对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。红黑树的性质使得他的高度为logn的高度,则使得红黑树的查找、插入、删除的时间复杂度最坏为O(log n)。如下图所示,即是一颗红黑树(下图引自wikipedia:http://t.cn/hgvH1l):
2、树的旋转:平衡二叉树要保持二叉树插入和删除时的平衡状态,所以就会涉及到树节点插入和删除时的旋转操作。红黑树比普通平衡二叉树要求更严格,红黑树旋转涉及到修改树中节点颜色及指针结构。
1)左旋:
图片来自:http://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html
当在某个结点pivot上,做左旋操作时,我们假设它的右孩子y不是NIL[T],pivot可以为任何不是NIL[T]的左子结点。左旋以pivot到Y之间的链为“支轴”进行,它使Y成为该子树的新根,而Y的左孩子b则成为pivot的右孩子。
2)右旋,类似于左旋。
3、TreeMap:继承AbstractMap,实现NavigableMap、Cloneable、Serializable三个接口。其中AbstractMap表明TreeMap为一个Map即支持key-value的集合。红黑树的插入和删除相当于二叉查找树的插入并在此基础上做了修复● 插入修复情况1:如果当前结点的父结点是红色且祖父结点的另一个子结点(叔叔结点)是红色。插入修复情况2:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子。插入修复情况3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左子。详情http://blog.csdn.net/v_JULY_v/article/details/6105630
TreeSet
1、定义:TreeSet是一个有序的提供有序的Set集合,具有Set的属性和方法,基于TreeMap实现,TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法,TreeSet基础AbstractSet,实现NavigableSet支持一系列额导航方法、实现Cloneable意味着可以被克隆、实现Serializable接口,支持序列化。
2、构造函数:
// 默认构造函数。使用该构造函数,TreeSet中的元素按照自然排序进行排列。
TreeSet()
// 创建的TreeSet包含collection
TreeSet(Collection extends E> collection)
// 指定TreeSet的比较器
TreeSet(Comparator super E> comparator)
// 创建的TreeSet包含set
TreeSet(SortedSet set)
TreeSet API
boolean add(E object)//将指定的元素添加到此 set(如果该元素尚未存在于 set 中)
boolean addAll(Collection extends E> collection)//将指定 collection 中的所有元素添加到此 set 中
void clear() //移除此 set 中的所有元素
Object clone() //返回 TreeSet 实例的浅表副本。属于浅拷贝
boolean contains(Object object)//如果此 set 包含指定的元素,则返回 true
E first()//返回此 set 中小于等于给定元素的最大元素不存在返回null
boolean isEmpty() //如果此 set 不包含任何元素,则返回 true
E last() //返回此 set 中当前最后一个(最高)元素
E pollFirst()//获取并移除第一个(最低)元素;如果此 set 为空,则返回 null
E pollLast()//获取并移除最后一个(最高)元素;如果此 set 为空,则返回 null
E lower(E e)//返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null
E floor(E e)//返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null
E ceiling(E e)//返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null
E higher(E e)//返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 nu
boolean remove(Object object)//将指定的元素从 set 中移除(如果该元素存在于此 set 中)
int size()//返回 set 中的元素数(set 的容量)
Comparator super E> comparator()//返回元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null
Iterator iterator()//
Iterator descendingIterator()//返回此 set 中所包含元素的逆序视图
SortedSet headSet(E end)//返回此 set 的部分视图,其元素严格小于 toElement
NavigableSet descendingSet()//返回此 set 中所包含元素的逆序视图
NavigableSet headSet(E end, boolean endInclusive)//返回此 set 的部分视图,其元素严格小于 toElement
SortedSet subSet(E start, E end)//返回此 set 的部分视图
NavigableSet subSet(E start, boolean startInclusive, E end, boolean endInclusive)
NavigableSet tailSet(E start, boolean startInclusive)//返回此 set 的部分视图
SortedSet tailSet(E start)
3、TreeSet继承关系:
java.lang.Object
↳ java.util.AbstractCollection
↳ java.util.AbstractSet
↳ java.util.TreeSet
public class TreeSet extends AbstractSet
implements NavigableSet, Cloneable, java.io.Serializable{}
1、Vector实现List接口,继承AbstractList类,可以将其看做队列支持相关的添加、删除、修改、遍历等功能。Vector实现RandmoAccess接口,即提供了随机访问功能,提供提供快速访问功能,Vector可以直接访问元素。Vector 实现了Cloneable接口,支持clone()方法,可以被克隆。Vector与ArrayList一样,通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
2、构造函数:
Vector共有4个构造函数
// 默认构造函数
Vector()
// capacity是Vector的默认容量大小。当由于增加数据导致容量增加时,每次容量会增加一倍。
Vector(int capacity)
// capacity是Vector的默认容量大小,capacityIncrement是每次Vector容量增加时的增量值。
Vector(int capacity, int capacityIncrement)
// 创建一个包含collection的Vector
Vector(Collection extends E> collection)
synchronized boolean add(E object)
void add(int location, E object)
synchronized boolean addAll(Collection extends E> collection)
synchronized boolean addAll(int location, Collection extends E> collection)
synchronized void addElement(E object)
synchronized int capacity()
void clear()
synchronized Object clone()
boolean contains(Object object)
synchronized boolean containsAll(Collection> collection)
synchronized void copyInto(Object[] elements)
synchronized E elementAt(int location)
Enumeration elements()
synchronized void ensureCapacity(int minimumCapacity)
synchronized boolean equals(Object object)
synchronized E firstElement()
E get(int location)
synchronized int hashCode()
synchronized int indexOf(Object object, int location)
int indexOf(Object object)
synchronized void insertElementAt(E object, int location)
synchronized boolean isEmpty()
synchronized E lastElement()
synchronized int lastIndexOf(Object object, int location)
synchronized int lastIndexOf(Object object)
synchronized E remove(int location)
boolean remove(Object object)
synchronized boolean removeAll(Collection> collection)
synchronized void removeAllElements()
synchronized boolean removeElement(Object object)
synchronized void removeElementAt(int location)
synchronized boolean retainAll(Collection> collection)
synchronized E set(int location, E object)
synchronized void setElementAt(E object, int location)
synchronized void setSize(int length)
synchronized int size()
synchronized List subList(int start, int end)
synchronized T[] toArray(T[] contents)
synchronized Object[] toArray()
synchronized String toString()
synchronized void trimToSize()
Vector与Collection关系
1)通过迭代器遍历
Integer value = null;
int size = vec.size();
for (int i=0; i
2)随机访问
Integer value = null;
int size = vec.size();
for (int i=0; i
3)for循环
Integer value = null;
for (Integer integ:vec) {
value = integ;
}
4)Enumeration遍历
Integer value = null;
Enumeration enu = vec.elements();
while (enu.hasMoreElements()) {
value = (Integer)enu.nextElement();
}