日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的方法也是存在返回值的 當存儲的keymap集合中不存在則返回null? 如果存在相同的key 返回上一個相同keyvalue

?

?

相關方法的使用:

?

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實現的原理是一樣的 所以實際上mapset是可以相互轉換的

?

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的遍历)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。