向量类 Vector 和栈类Statck类 和栈类 Statck
java 框架集合是java 2中引入的。java 2 之前的版本也支持一些数据结构,其中就有向量类 Victor 与栈类 Statck。为了适应java 集合框架 ,java 2 对这些类进行重新设计,但是为了向后兼容,保留了他们所有的旧的方法。除了包含用于同步的用于访问和修改向量的同步方法之外,Vector与ArrayList类是一样的。同步方法用于防止两个或多个线程同事访问某个向量是引起数据损坏。对于许多不需要同步访问的程序来说,使用ArrayLsit 比使用Vector 效率更高。
Vector 类保留了旧的方法的同时 实现了List接口。
java.util.Vector extends java.utile.List
Vector() | 创建一个i额出事融来那个为10的默认空向量 |
Vector(c:Collectong<? extends E>) | 创建一个来自现有集合的向量 |
Vector(initialCapacity:int) | 创建一个指定初始容量的向量 |
Vector(initialCapacity:int,capacityIncr:int) | 创建一个指定初始容量和增量的向量 |
addElement(o:E):void | 在向量的末尾追加一个元素 |
capacity();int | 返回向量的当前容量 |
copyInto(anArray:Object【】):void | 将向量的元素复制给一个数组 |
elementAt(index:int):E | 返回指定下标出的对象 |
elements():Enumeration<E> | 返回向量类的枚举 |
ensureCapacity():void | 增加向量的容量 |
firstElement():E | 返回向量的第一个元素 |
insertElementAt(o:E,index:int):void | 将o插入向量的指定下标处 |
lastElement():E | 返回向量的最后一个元素 |
removeAllElements():void | 删除向量中的所有元素 |
removeElement(o:Object):boolean | 删除向量中的所有元素 |
removeelementAt(index:int):void | 删除指定小标处的元素 |
setElementAt(o:Object,index:int) | 在指定下标出设置一个新元素 |
setSize(newSize:int):void | 设置向量的新尺寸 |
trimToSize():viod | 将向量的容量缩小到他的尺寸 |
Vector类中的大多数附加的方法都类似于List接口中的方法,这写方法实在java集合框架之前引入的。 Statck类是Vector类的扩展类。
java.util.statck<E> extends java.util.Vector<E>
Stack() | 创建一个空栈 |
empty():boolean | 如果栈为空则返回true |
peek():E | 返回栈顶的元素 |
pop():E | 返回并删除栈顶的元素 |
push(o:E):E | 在栈顶增加一个新元素 |
search(o:Object):int | 返回战中指定元素的位置 |
| |
列队和优先列队
列队是一种先进先出的数据结构,元素被追加到列队末尾,然后在列头删除。优先列队中,元素被赋予优先权限,当访问元素时,拥有最高权限优先级元素首先被删除。Queue接口扩展了 java.uitl.collection接口.
java.util.Queue extends java.util.Collection
offer(element : E):boolean | 向列对中插入一个元素 |
poll() : E | 获取并删除列头,如果列队为空则返回 null |
remove():E | 获取并删除列头,如果列队为空 则抛出异常 |
peek() | 返回但是不删除列头列头,如果列队为空返回null |
element():E | 返回但是不删除列头,如果列队为空抛出异常 |
双端列队Deque和链表LinkedList
LinkedList 实现了Deque接口,因此可以使用LinkedList创建一个列队。Deque支持两端插入和删除元素。Deque扩展了Queue接口。提供了两端删除、和插入的方法。addFirst(e)/removeFirst(e)、addLast(e)、removeLast(e)、getFist( ) 和 getLast( ) 都是被定义在Deque接口中。
package LianXi;
import java.util.Queue;
import java.util.LinkedList;
public class QueueTest
{
public static void main(String[] args)
{
Queue<String> testQueue = new LinkedList<String>();
testQueue.offer("aaaa");
testQueue.offer("bbbb");
testQueue.offer("cccc");
testQueue.offer("dddd");
testQueue.offer("eeee");
while(testQueue.size()>0){
System.out.println(testQueue.poll());
}
}
}
输出顺序就是添加进入列队的顺序
aaaa
bbbb
cccc
dddd
eeee
PriorityQueue实现一个优先列队。默认情况下,优先列队以Comparable 接口以自然顺序排序,拥有最小数值的元素拥有最高优先级,因此最先从列队中删除。如果几个元素具有相同的优先级最高优先级,其中任意一个都可以从列队中删除。也可以使用构造方法 priorityQueue(initialCapcity :int,c:Comparator) 中的Comparator 来对元素排序。
java.utile.PriorityQueue extends java.util.Queue
PriorityQueue() | 创建一个初始容量为11的默认优先队列 |
PriorityQueue(initialCapcity:int) | 创建一个指定初始容量的优先列队。 |
PriorityQueue(c:Collection<? :extends E>) | 从现有结合创建一个列队。 |
PriorityQueue(initialCapcity:int,c:Comparator< ? extends E>) | 创建一个带指定初始容量和比较器的优先列队 |
import java.util.PriorityQueue;
public class QueueTest
{
public static void main(String[] args)
{
PriorityQueue<String> testQueue = new PriorityQueue<String>();
testQueue.offer("aaaa");
testQueue.offer("cccc");
testQueue.offer("cccc");
testQueue.offer("dddd");
testQueue.offer("bbbb");
testQueue.offer("eeee");
while(testQueue.size()>0){
System.out.println(testQueue.poll());
}
System.out.println("============帶倒序比較器的優先列隊==========");
PriorityQueue<String> testQueue2 = new PriorityQueue<String>(5,java.util.Collections.reverseOrder());
testQueue2.offer("eeee");
testQueue2.offer("aaaa");
testQueue2.offer("cccc");
testQueue2.offer("dddd");
testQueue2.offer("cccc");
testQueue2.offer("bbbb");
while(testQueue2.size()>0){
System.out.println(testQueue2.poll());
}
}
}
图 Map
图是一种依照键值存储元素的容器。键值类似下标,在List中下标是整数,而在Map中键值可以使任意类型的对象。图中不能有重复的键值,每个键值对应一个值,一个键值与它的对应的值构成一个条目,真正在图中存储的是这个条目。
图的类型有三种:散列图 HashMap、链式散列图 LinkedHashMap 和树形图 TreeMap。这些图的通用特性都定义在Map接口中。
Map接口提供了查询、更新和获取结合的值和集合的键值的方法。
AbstractMap是一个便利类,它实现了Map接口中除了entrySet()方法之外的所有方法。
SortedMap接口扩展Map接口、并保持映射以键值的升序排列。它还有附加的方法firstKey() 和 lastKey()以返回最低键值和最高键值、headMap(toKeyI)返回键值小于toKey的那部分图,tailMap(fromKey) 返回键值大于或者等于framKey的那部分图。
HashMap 、LinkedHashMap、TreeMap 是Map接口的三个具体实现。
对于,定位、插入、以及删除一个映射HashMap是最高效的。
LinkedHashMap类用链表实现类扩展HashMap类,它支持图中条目的排序。HashMap类中的条目是没有顺序的,但是LinkedHashMap中,元素既可以按照插入图的顺序排序,也可以按照反问顺序排序。无参构造函数是以插入顺序创建链表的,要按访问顺序创建 应该私用 LinkedHashMap(initialCapcity,loadFactor,true)。
package LianXi;
import java.util.*;
public class LinkedHashMapTest
{
public static void main(String[] args)
{
LinkedHashMap<String,String> insertSrotMap = new LinkedHashMap<String,String>();
insertSrotMap.put("aaaaK","aaaaV");
insertSrotMap.put("ccccK","ccccV");
insertSrotMap.put("bbbbK","bbbbV");
insertSrotMap.put("ddddK","ddddV");
eachMap(insertSrotMap.entrySet());
System.out.println("==========根据访问顺序排序===============");
LinkedHashMap<String,String> vSrotMap = new LinkedHashMap<String,String>(3,0.75f,true);
vSrotMap.putAll(insertSrotMap);
//根据数组中的顺序访问
String[] keys = {"aaaaK","bbbbK" ,"ccccK","ddddK"};
for( String key :keys){
System.out.println(key+ " : " + vSrotMap.get(key));
}
eachMap(vSrotMap.entrySet());
}
private static void eachMap(Set<Map.Entry<String,String>> set){
for(Map.Entry<String,String> entry :set){
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
TreeMap在便利排好顺序的键值是非常高效。键值可以使用comparable接口或者Comparator接口来排序。如果使用它的无参构造方法创建一个TreeMap对