您的位置:首页 > 移动开发 > Objective-C

List, Map, Set与Iterator的使用

2011-04-28 10:11 309 查看
   在Java 开发中,JDK为我们提供了一些工具类来完成线性表、链表、哈希表等基本的数据结构操作。

这些类和接口在java.util包中可以找到。下面通过一个程序实例来演示说明。

 

                   
public class TestCollection {
public TestCollection() {

}
////////////////////////////////List类////////////////////////////////////

//ArrayList实现了List接口,允许空元素,支持增加、删除、替换元素等操作。是一种非同步线程不安全的list 。
public static void testArrayList(){
System.out.println("/*************************ArrayList*********************/");
List<Integer> mArrayList=new ArrayList<Integer>();
mArrayList.add(1);
mArrayList.add(3);
mArrayList.add(5);
System.out.println("ArrayList "+mArrayList);
System.out.println("ArrayList index为2的元素 "+mArrayList.get(2));//得到index为2的元素
//用迭代器将其迭代化,将其系列化为一个系列,这样就可以遍历整个序列而不用关心底层结构
Iterator<Integer> mIterator=mArrayList.iterator() ;
System.out.println("查看Iterator "+mIterator);
System.out.print("依此输出ArrayList的每个元素 ");
while(mIterator.hasNext()){
System.out.print(" "+mIterator.next()+" ");
}
System.out.println();
}

/*LinkedList实现了List接口,允许空元素,除支持增加、删除、替换,还提供了pop,push,get等操作
可在LinkedList首部或尾部添加元素,这些操作使LinkedList可被用在堆栈(stack),队列(queue)或双向队列(deque)
LinkedList随机选取元素需要在列表中移动,访问越靠近表尾的元素,花费的时间越长。
如果往列表中插入一个元素,LinkedList开销则比ArrayList小的多*/
public static void testLinkedList(){
System.out.println("/*************************LinkedList***********************/");
List<String> mLinkedList=new LinkedList<String>();
List<String> mArrayList=new ArrayList<String>();
mArrayList.add("11");
mArrayList.add("22");

mLinkedList.add("str1");
mLinkedList.add("str2");
mLinkedList.add(null);//最好不要添加空元素。当poll的时候判断为null指示后面的没有元素
mLinkedList.addAll(mArrayList);
((LinkedList<String>) mLinkedList).offer("queue");
((LinkedList<String>) mLinkedList).addFirst("addFirst");//此处为何要强制转型?
((LinkedList<String>) mLinkedList).pop();
((LinkedList<String>) mLinkedList).push("push");//等同于addFirst
System.out.println("LinkedList "+mLinkedList);
System.out.println("顶元素为:"+((LinkedList<String>) mLinkedList).peek());
Iterator<String> mIterator=mLinkedList.iterator();
System.out.println("依此输出LinkedList的每个元素");
while(mIterator.hasNext()){
System.out.print(mIterator.next()+" ");
}
System.out.println();
}

//Vector实现了List接口,是同步、线程安全的。在不是多线程环境中使用,最好选ArrayList
public static void testVector(){
System.out.println("/*************************Vector***********************/");
List<Number> mVector=new Vector<Number>();
mVector.add(12.2d);
mVector.add(23);
mVector.add(1, 3.4f);//在index为1的位置增加元素3.4f
System.out.println("Vector "+mVector);
Iterator<Number> mIterator=mVector.iterator();
System.out.println("依此输出Vector的每个元素");
while(mIterator.hasNext()){
System.out.print(mIterator.next()+" ");
}
System.out.println();
}
//////////////////////////////////List///////////////////////////////

//////////////////////////////////Map///////////////////////////////

//HashMap实现了Map接口。和HashTable一样是散列表,不可排序,可以添加空值
public static void testHashMap(){
System.out.println("/*************************HashMap***********************/");
Map<String, Object> mHashMap=new HashMap<String, Object>();
mHashMap.put("name", "roger");
mHashMap.put("age", 24);
mHashMap.put("sex", "male");
mHashMap.put("salary", null);
mHashMap.put(null, null);
//Map类都要先转换为最老的迭代Collection后,才能够转换为新的迭代Iterator
//也可以将Map类调用entrySet转换为Set<entry<K,V>>,或调用keySet转化为Set<K>再进行操作
Collection<Object> mCollection=mHashMap.values();
System.out.println("HashMap "+mHashMap);
System.out.println("由Map转换后的Collection(V) "+mCollection);
Iterator<Object> mIterator=mCollection.iterator();
System.out.println("依此输出Collection中的值(V)");
while(mIterator.hasNext()){
System.out.print(mIterator.next()+" ");
}
System.out.println();
}

//HashTable实现了Map接口。不可添加空值,并且HashTable是同步的
public static void testHashtable(){
System.out.println("/*************************Hashtable***********************/");
Map<Integer, String> mHashtable=new Hashtable<Integer,String>();
mHashtable.put(1, "one");
mHashtable.put(2, "two");
mHashtable.put(3, "three");
System.out.println("Hashtable "+mHashtable);
//Map类可以先转换为Set集合再进行操作
Set<Integer> mSet=mHashtable.keySet();
System.out.println("由Map转换后的Set(K) "+mSet);
System.out.println("依此输出Hashtable中的键和值");
for(Integer i:mSet){
System.out.print(i+","+mHashtable.get(i)+"| ");
}
System.out.println();
}

//TreeMap实现了Map接口。 不可添加空值,并且TreeMap是自动排序的
public static void testTreeMap(){
System.out.println("/*************************TreeMap***********************/");
Map<String, Object> mTreeMap=new TreeMap<String, Object>();
mTreeMap.put("Integer", 2011);
mTreeMap.put("Double", 2011.12d);
mTreeMap.put("Character", "M");
System.out.println("TreeMap "+mTreeMap);
Collection<Object> mCollection=mTreeMap.values();
System.out.println("由Map转换后的Collection(V) "+mCollection);
Iterator<Object> mIterator=mCollection.iterator();
System.out.println("依此输出TreeMap中的值(V)");
while(mIterator.hasNext()){
System.out.print(mIterator.next()+" ");
}
System.out.println();
}

public static void testStack(){
System.out.println("/*************************Stack***********************/");
Stack<Integer> mStack=new Stack<Integer>();
mStack.add(10);
mStack.add(20);
mStack.add(30);
System.out.println("Stack "+mStack);
Object[] object1=mStack.toArray();
System.out.println("由Stack转换为Object array后取出元素 ");
for(int i=0;i<object1.length;i++){
System.out.print(object1[i]+" ");
}
System.out.println();
System.out.println("使用pop,peek取出元素 ");
while(!mStack.empty()){
System.out.print(mStack.peek()+" ");
mStack.pop();
}
Stack<Map<String, Integer>> mStack2=new Stack<Map<String, Integer>>();
Map<String, Integer> mMap=new HashMap<String,Integer>();
mMap.put("mp1", 1);
Map<String, Integer> mMap2=new HashMap<String,Integer>();
mMap2.put("mp1", 2);
mStack2.add(mMap);
mStack2.add(mMap2);
Object[] objects=mStack2.toArray();
System.out.println();
System.out.println("将Stack转换为Object array和使用Iterator将其序列化取出HashMap元素");
for(int i=0;i<objects.length;i++){
System.out.print(objects[i]);
}
System.out.print(" | ");
Iterator<Map<String, Integer>> mIterator=mStack2.iterator();
while(mIterator.hasNext()){
System.out.print(mIterator.next());
}//这种方式取不出Map,是由于Stack LIFO方式决定的
System.out.println();
System.out.println("使用pop,peek取出HashMap元素");
while(!mStack2.empty()){
System.out.print(mStack2.peek());
mStack2.pop();
}
}

public static void main(String args[]){
testArrayList();
testLinkedList();
testVector();
testHashMap();
testHashtable();
testTreeMap();
testStack();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息