List, Map, Set与Iterator的使用
2011-04-28 10:11
309 查看
在Java 开发中,JDK为我们提供了一些工具类来完成线性表、链表、哈希表等基本的数据结构操作。
这些类和接口在java.util包中可以找到。下面通过一个程序实例来演示说明。
这些类和接口在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(); } }
相关文章推荐
- java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用
- List、Set、Map的使用
- Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- Java中容器[Collection(List,Set,Queue),Map],迭代器(Iterator)和比较器(Comparator)及列表排序
- Java集合类: Set、List、Map、Queue使用场景梳理
- Spring中List、Set、Map、数组注入方式中标签的使用
- [Java] 集合类(List、Set、Map的基本使用)
- Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)
- Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
- Java中Map, List, Set和Queue的区别和使用场景
- Spring中使用Map、Set、List、数组、属性集合的注入方法配置文件
- Java集合类: Set、List、Map、Queue使用场景梳理
- list、set、Map的区别和使用
- Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)
- Java集合类: Set、List、Map、Queue使用方法详解
- javawebday11(junit debug调试 泛型 遍历 list set map 使用通配符T)
- 【转载】Hibernate之hbm.xml集合映射的使用(Set集合映射,list集合映射,Map集合映射)
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- struts2 jsp页面访问List, set 和<s:iterator>的使用