Iterator it = arr.iterator(); // 獲取迭代器while(it.hasNext()){ // 進行遍歷     Object o = it.next;     ...}          對于List的遍歷// 遍歷List:List<String> list = new ArrayList<String>();list.add("a");list.add("b");list.add("c");// 1,增強的for循環for (String str: list) {     System.out.println(str);}// 2,下標for (int i = 0; i < list.size(); i++) {     System.out.println(list.get(i));}// 3,迭代器for (Iterator<String> iter = list.iterator(); iter.hasNext();) {     String elt = iter.next();     System.out.println(elt);}     對于Set的遍歷Set set = new HashSet();set.add(new String("11"));set.add(new String("222"));// 增強的for循環for (String elt : set) {     System.out.println(elt);}// 迭代器Iterator i = set.iterator();//先迭代出來while(i.hasNext()){//遍歷     System.out.println(i.next());}     對于Map的遍歷// 1、通過獲取所有的key按照key來遍歷Map map = new HashMap();map.put("key1","lisi1");map.put("key2","lisi2");map.put("key3","lisi3");map.put("key4","lisi4");//先獲取map集合的所有鍵的set集合,keyset()Iterator it = map.keySet().iterator(); //獲取迭代器while(it.hasNext()){     Object key = it.next();     System.out.println(map.get(key));}// 2、通過Map.values()遍歷所有的value,但不能遍歷keyfor (String v : map.values()) {    System.out.println("value= " + v);}// 3、通過Map.entrySet遍歷key和value,推薦,尤其是容量大時Map map = new HashMap();//將map集合中的映射關系取出,存入到set集合Iterator it = map.entrySet().iterator();while(it.hasNext()){     Entry e =(Entry) it.next();     System.out.println("鍵"+e.getKey () + "的值為" + e.getValue());}PS:     第一種方法:KeySet()     將Map中所有的鍵存入到set集合中。因為set具備迭代器。所有可以迭代方式取出所有的鍵,再根據get方法。獲取每一個鍵對應的值。 keySet():迭代后只能通過get()取key 。取到的結果會亂序,是因為取得數據行主鍵的時候,使用了HashMap.keySet()方法,而這個方法返回的Set結果,里面的數據是亂序排放的。     第二種方法:entrySet()     Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射關系的 Set 視圖。(一個關系就是一個鍵-值對),就是把(key-value)作為一個整體一對一對地存放到Set集合當中的。Map.Entry表示映射關系。entrySet():迭代后可以e.getKey(),e.getValue()兩種方法來取key和value。返回的是Entry接口。     四、主要實現類的區別小結     Vector和ArrayList     1,vector是線程同步的,所以它也是線程安全的,而arraylist是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用arraylist效率比較高。     2,如果集合中的元素的數目大于目前集合數組的長度時,vector增長率為目前數組長度的100%,而arraylist增長率為目前數組長度的50%。如果在集合中使用數據量比較大的數據,用vector有一定的優勢。     3,如果查找一個指定位置的數據,vector和arraylist使用的時間是相同的,如果頻繁的訪問數據,這個時候使用vector和arraylist都可以。而如果移動一個指定位置會導致后面的元素都發生移動,這個時候就應該考慮到使用linklist,因為它移動一個指定位置的數據時其它元素不移動。          ArrayList 和Vector是采用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,但是插入數據要涉及到數組元素移動等內存操作,所以索引數據快,插入數據慢,Vector由于使用了synchronized方法(線程安全)所以性能上比ArrayList要差,LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行向前或向后遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入數度較快。     注意:Vector唯一的優勢就是線程安全,但是現在有Collections.synchronizedListt方法拿同步的List,于是Vector被淘汰了。并且相對ArrayList來說很浪費空間。Vector滿空間后需要擴容一倍。     Arraylist和Linkedlist     1.ArrayList是實現了基于動態數組的數據結構,ArrayList的內部實現是基于內部數組Object[ ]     2.LinkedList基于鏈表的數據結構。     3.對于隨機訪問get和set,ArrayList覺得優于LinkedList,因為LinkedList要移動指針。     4.對于新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。 這一點要看實際情況的。若只對單條數據插入或刪除,ArrayList的速度反而優于LinkedList。但若是批量隨機的插入刪除數據,LinkedList的速度大大優于ArrayList. 因為ArrayList每插入一條數據,要移動插入點及之后的所有數據。         HashMap與TreeMap     1、 HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。     2、在Map 中插入、刪除和定位元素,HashMap是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和 equals()的實現。兩個map中的元素一樣,但順序不一樣,導致hashCode()不一樣。     同樣做測試:     在HashMap中,同樣的值的map,順序不同,equals時,false;     而在treeMap中,同樣的值的map,順序不同,equals時,true,說明,treeMap在equals()時是整理了順序了的。     HashTable與HashMap     1、同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的。     2、HashMap允許存在一個為null的key,多個為null的value 。     3、hashtable的key和value都不允許為null。總結:1、如果線程要求安全,使用Vector(不推薦) ,Hashtable2、如果不要求線程安全,應使用ArrayList(推薦),LinkedList,HashMap3、如果要求鍵值對,則使用HashMap(推薦)、Hashtable4、如果數據很大,又要線程安全考慮Vector(不推薦)Java8 更新的新特性1.Lambda表達式 在java8中新增加了一個forEach方法,可以使用Lambda表達式來遍歷集合元素Collection books=new HashSet();//調用foreach方法循環遍歷集合books.forEach(obj->System.out.println("迭代元素:"+obj));2.使用Lambda遍歷Iterator java8中為Iterator增加了一個forEachRemaining方法,,也可以使用Lambda來遍歷Collection books=new HashSet();//獲取books集合對應的迭代器Iterator it=books.iterator();//使用lambda表達式(目標類型是Comsumer)來遍歷集合元素it.forEachRemaining(obj ->System.out.println("輸出的結果是"+obj));3.java8中增加的Predicate操作集合 在java8中為Collection集合增加了一個removeIF方法,也可以用來操作lambdaList<String> list = new ArrayList<String>(){     {          // 為list添加數據          addAll(Arrays.asList("wangzhen456liupei123".split("")));          add("1521"); // 純數字數據          add("wanghzen123") // 數字+字符數據          add("wangzhen"); // 純字符串       }};System.out.println("初始數據:" + list);Pattern pattern = Pattern.compile("//d");//匹配數字Predicate<String> filter = s -> pattern.matcher(s).find();list.removeIf(filter);//移除 System.out.println(list);// 超簡略寫法list.removeIf(s -> Pattern.compile("//d").matcher(s).find()); 4.Stream操作集合 在java8中還增加了Stream、intStream、LongStream、DoubleStream等流式API,并且java8中還為每個API提供了對應的Builder,例如StreamBuilder、IntStreamBuilder等 5.Collection操作集合 在java8中還為Collection提供了stream()默認方法,改方法用來返回該集合對應的流