JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)
集合的遍歷 Iterator?? foreach? 掌握?? Enumeration
?
List??? Set??? 觀察兩個接口
?
迭代器輸出 Iterator
?
?
Set接口 或者 List 接口 都存在Iterator方法 該方法返回一個Iterator接口,通過該接口可與獲得迭代器
?
Iterator 的方法
1 public boolean?hasNext(); 判斷集合中的下一個元素是否存在
?
2 public E?next()? 取得集合中的下一個元素
?
3 default?void?remove() 刪除迭代器中元素
范例:實現迭代輸出
| package org.collection; ? import java.util.ArrayList; import java.util.Iterator; import java.util.List; ? public class ListDemo01 { ? ???? public static void main(String[] args) { ????????? ????????? ?List<String> all=new ArrayList<>(); ????????? ? ????????? ? ????????? ?all.add("hello"); ????????? ? ????????? ?all.add("world"); ????????? ? ????????? ?all.add("haha"); ????????? ? ? ????????? //1 聲明迭代接口 ????????? ? ????????? ?Iterator<String> iter=all.iterator(); ????????? ? ????????? ?while(iter.hasNext()) { ?????????????? ? ?????????????? ?String str=iter.next();//如果存在元素 取出賦值給 str ?????????????? ? ?????????????? ?System.out.println(str); ????????? ?} ???? } } ? |
?
?
2 Foreach 輸出
| ?//2 foreach輸出 ????????? ?for(String str:all) { ?????????????? ? ?????????????? ?System.out.println(str); ????????? ?}?? |
?
?
3 枚舉輸出 Enumeration
Enumeration 也是一個古老的接口,和Vector 是一樣的, Enumeration 主要就是為Vector服務的
觀察Vector 類中的方法
public?Enumeration<E>?elements() ;返回值正好就是Enumeration Vector獨有的方法,如果想使用該方法可以不轉型 或者向下轉型
?
Enumeration 方法有兩個:
?
1 boolean?hasMoreElements(); 判斷下一個元素是否存在
?
2 E?nextElement(); 取得下一個元素
?
范例: 使用枚舉輸出 Enumeration ( 只為Vector服務) (了解)
| ?//3 枚舉輸出 Enumeration ????????? ? ????????? ?Enumeration<String> enm=all.elements(); //獲得枚舉輸出接口 ????????? ? ????????? ?while(enm.hasMoreElements()) {? //判斷下一個元素是否存在 ?????????????? ? ?????????????? ?String str=enm.nextElement();? //取出下一個元素 ?????????????? ? ?????????????? ?System.out.println(str); ????????? ?} ????????? ? |
?
?
Map 接口
?
之前學習的Collection 接口 都是順序結構,在Colleciont接口中保存的所有對象都是單個對象,而Map是鍵值對的方式出現的
?
鍵? Key???? 值 value
?
1???????????? 張三
?
張三??????? 123456
?
在Map集合中最大的父接口就是 Map 該接口的定義如下:
| public interface Map<K,V>? K?? V 使用的時候可以定義兩個泛型 一個 K? 另一個是V |
?
Map接口中的核心方法:
1? public V?put(K?key, V?value);? 往map集合中添加元素,k?? v
?
2? public V?get(Object?key)? 給定一個key 取出key對應的V
?
3 Set<Map.Entry<K,V>>?entrySet(); 把一個map集合轉換為Set集合
?
4 public boolean?containsKey(Object?key) 查詢指定的key是否存在
?
5 public Set<K>?keySet(); 其中的key 轉換為set
?
6public ?V?remove(Object?key) ; 根據指定的key刪除元素
?
?
Map本身是一個接口,接口不能直接使用,實現類
?
1 HashMap
2 HashTable
3 LinkedHashMap
4 TreeMap
范例: 實現Map集合的應用(HashMap)
| public static void main(String[] args) { ????????? // k 只能是String?? v 只能是int ????????? Map<String, Integer> all=new HashMap<>(); ????????? ????????? //通過put的方法添加元素到Map集合 ????????? all.put("one", 1); ????????? ????????? all.put("two", 2); ????????? ????????? all.put("one", 3); //重復的key ????????? ????????? System.out.println(all); ???? } |
在hashMap中 Key值是不能重復的, value是可以重復的, 如果出現了相同的key 之前的key 會被覆蓋掉
范例:使用get方法取得map集合中的指定內容
| System.out.println(all.get("one")); |
?
?
使用HashMap中 put方法 get方法
?
Put存放 鍵值對? ,get? 通過 key 取得對應的value ;
?
特點:其實對于put的方法也是存在返回值的 當存儲的key在map集合中不存在則返回null? 如果存在相同的key 返回上一個相同key的value
?
?
相關方法的使用:
?
1 刪除
Remove
| System.out.println(all.remove("noe")); |
?
2 查找指定的key是否存在
| System.out.println(all.containsKey("one")); |
3 查找指定的value是否存在
| System.out.println(all.containsValue(1)); |
?
?
2 HashTable
?
其實相對于HashMap也是一個古老的類,功能上和HashMap完全一樣,但是區別是:
1 HashTable 線程安全? 同步處理?? 效率低??? key?? 和? value? 都不允許為null
?
2 HashMap 非線程安全, 異步處理? 效率高?? key? 和? value 都允許為null
?
面試題
?
3 LinkedHashMap
?
HashMap在集合的使用中是最常用的,但是它的特點是存放的數據是無序的,而如果現在想要存放的數據為有序的map集合 則可以使用LinkedHashMap完成 (有序? 存放的順序)
| public static void main(String[] args) { ????????? ????????? Map<String, Integer> all=new LinkedHashMap<>(); ????????? all.put("three", 3); ????????? ????????? all.put("two", 2); ????????? ????????? all.put("one", 1); ????????? ????????? System.out.println(all); ???? } |
?
LinkedHashMap 主要的實現形式基于鏈表實現的,既然是鏈表的保存,其保存的數據量一般不會太大,如果使用該結構的時候存儲了大量的數據,則時間復雜度會大量的攀升
?
?
4 TreeMap? (樹結構? 二叉樹)
?
TreeMap子類的特點:就是可以按照key進行排序,使用這個類的時候一定要配合一個接口:
?
Comparable 接口
TreeMap定義如下:
| public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializabl |
?
范例: 實現TreeMap排序
| public static void main(String[] args) { ????????? ????????? Map<String, Integer> all=new TreeMap<>(); ????????? all.put("C", 3); ????????? all.put("B", 2); ????????? all.put("A", 1); ????????? System.out.println(all); ???? } |
?
練習: 自己定義一個類 作為key存儲在TreeMap 實現key的排序
| public static void main(String[] args) { ????????? ????????? ????????? Map<Person, Integer> all=new TreeMap<>(); ???? ????????? all.put(new Person("張三",20), 3); ????????? ????????? all.put(new Person("小強",999), 2); ????????? ????????? all.put(new Person("隔壁老王",89), 1); ????????? ????????? System.out.println(all); ???? } |
?
?
主要掌握 HashMap? LinkedHashMap? TreeMap? HashTable 了解其實現類的特點:在開發中根據實際的業務需求選擇使用相應的實現類
?
map的遍歷:
?
Map.Entry接口:
| ?static class Node<K,V> implements Map.Entry<K,V> |
?
?
?
在Map.Entry接口中提供了如下方法:
?
1? public K?getKey() 取得key
?
2?? public V?getValue() 取得value
?
通過之前提到一個方法 entrySet()
Public Set<Map.Entry<K,V>>?entrySet()? 返回值包含了 Map.entry :
?
思考 : 在Map集合中 key是不可重復的,treeMap 有序的? HashMap 是無序的 和Set集合非常的相似 key底層和set實現的原理是一樣的 所以實際上map和set是可以相互轉換的
?
Map.entry 里面存放的是 key? value? 最終遍歷取值的也是通過map.entry?
?
范例: 實現Map集合的遍歷
| package org.map; ? import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.Set; ? public class HashMapDemo { ? ???? public static void main(String[] args) { ????????? ????????? // k 只能是String?? v 只能是int ????????? Map<String, Integer> all=new HashMap<>(); ????????? ????????? //通過put的方法添加元素到Map集合 ????????? all.put("one", 1); ????????? ????????? all.put("two", 2); ????????? ????????? all.put("three", 3); ????????? ????????? //1 將map集合轉換為Set集合 ????????? ????????? Set<Map.Entry<String, Integer>> set=all.entrySet(); ????????? ????????? //2 遍歷set集合 ????????? Iterator<Map.Entry<String, Integer>> iter=set.iterator(); ????????? ????????? //循環取出迭代器中的內容 ????????? while(iter.hasNext()) { ?????????????? ?????????????? Map.Entry<String, Integer> me=iter.next(); ?????????????? ?????????????? System.out.println(me.getKey()); //取得key的方法 ?????????????? ?????????????? System.out.println(me.getValue());//取得value的方法 ????????? } ???? } } ? |
?
總結
以上是生活随笔為你收集整理的JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 酷狗音乐耳机线控切歌怎么设置
- 下一篇: 华为P60 Pro / Mate X3