日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2023/12/19 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

集合的遍歷 Iterator?? foreach? 掌握?? Enumeration

?

List??? Set??? 觀察兩個(gè)接口

?

迭代器輸出 Iterator

?

?

Set接口 或者 List 接口 都存在Iterator方法 該方法返回一個(gè)Iterator接口,通過該接口可與獲得迭代器

?

Iterator 的方法

1 public boolean?hasNext() 判斷集合中的下一個(gè)元素是否存在

?

2 public E?next()? 取得集合中的下一個(gè)元素

?

3 default?void?remove() 刪除迭代器中元素


范例:實(shí)現(xiàn)迭代輸出

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 也是一個(gè)古老的接口,和Vector 是一樣的, Enumeration 主要就是為Vector服務(wù)的

觀察Vector 類中的方法

public?Enumeration<E>?elements() ;返回值正好就是Enumeration Vector獨(dú)有的方法,如果想使用該方法可以不轉(zhuǎn)型 或者向下轉(zhuǎn)型

?

Enumeration 方法有兩個(gè):

?

1 boolean?hasMoreElements(); 判斷下一個(gè)元素是否存在

?

2 E?nextElement() 取得下一個(gè)元素

?

范例: 使用枚舉輸出 Enumeration ( 只為Vector服務(wù)) (了解)

?//3 枚舉輸出 Enumeration

????????? ?

????????? ?Enumeration<String> enm=all.elements(); //獲得枚舉輸出接口

????????? ?

????????? ?while(enm.hasMoreElements()) {? //判斷下一個(gè)元素是否存在

?????????????? ?

?????????????? ?String str=enm.nextElement();? //取出下一個(gè)元素

?????????????? ?

?????????????? ?System.out.println(str);

????????? ?}

????????? ?

?

?

Map 接口

?

之前學(xué)習(xí)的Collection 接口 都是順序結(jié)構(gòu),在Colleciont接口中保存的所有對象都是單個(gè)對象,而Map是鍵值對的方式出現(xiàn)的

?

? Key???? value

?

1???????????? 張三

?

張三??????? 123456

?

Map集合中最大的父接口就是 Map 該接口的定義如下:

public interface Map<K,V>? K?? V 使用的時(shí)候可以定義兩個(gè)泛型 一個(gè) K? 另一個(gè)是V

?

Map接口中的核心方法:

1? public V?put(K?key, V?value);? map集合中添加元素,k?? v

?

2? public V?get(Object?key)? 給定一個(gè)key 取出key對應(yīng)的V

?

3 Set<Map.Entry<K,V>>?entrySet(); 把一個(gè)map集合轉(zhuǎn)換為Set集合

?

4 public boolean?containsKey(Object?key) 查詢指定的key是否存在

?

5 public Set<K>?keySet(); 其中的key 轉(zhuǎn)換為set

?

6public ?V?remove(Object?key) ; 根據(jù)指定的key刪除元素

?

?

Map本身是一個(gè)接口,接口不能直接使用,實(shí)現(xiàn)類

?

1 HashMap

2 HashTable

3 LinkedHashMap

4 TreeMap

范例: 實(shí)現(xiàn)Map集合的應(yīng)用(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); //重復(fù)的key

?????????

????????? System.out.println(all);

???? }

hashMap Key值是不能重復(fù)的, value是可以重復(fù)的, 如果出現(xiàn)了相同的key 之前的key 會(huì)被覆蓋掉

范例:使用get方法取得map集合中的指定內(nèi)容

System.out.println(all.get("one"));

?

?

使用HashMap put方法 get方法

?

Put存放 鍵值對? get? 通過 key 取得對應(yīng)的value

?

特點(diǎn):其實(shí)對于put的方法也是存在返回值的 當(dāng)存儲的keymap集合中不存在則返回null? 如果存在相同的key 返回上一個(gè)相同keyvalue

?

?

相關(guān)方法的使用:

?

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

?

其實(shí)相對于HashMap也是一個(gè)古老的類,功能上和HashMap完全一樣,但是區(qū)別是:

1 HashTable 線程安全? 同步處理?? 效率低??? key?? ? value? 都不允許為null

?

2 HashMap 非線程安全, 異步處理? 效率高?? key? ? value 都允許為null

?

面試題

?

3 LinkedHashMap

?

HashMap在集合的使用中是最常用的,但是它的特點(diǎn)是存放的數(shù)據(jù)是無序的,而如果現(xiàn)在想要存放的數(shù)據(jù)為有序的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 主要的實(shí)現(xiàn)形式基于鏈表實(shí)現(xiàn)的,既然是鏈表的保存,其保存的數(shù)據(jù)量一般不會(huì)太大,如果使用該結(jié)構(gòu)的時(shí)候存儲了大量的數(shù)據(jù),則時(shí)間復(fù)雜度會(huì)大量的攀升

?

?

4 TreeMap? (樹結(jié)構(gòu)? 二叉樹)

?

TreeMap子類的特點(diǎn):就是可以按照key進(jìn)行排序,使用這個(gè)類的時(shí)候一定要配合一個(gè)接口:

?

Comparable 接口

TreeMap定義如下:

public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializabl

?

范例: 實(shí)現(xiàn)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);

???? }

?

練習(xí): 自己定義一個(gè)類 作為key存儲在TreeMap 實(shí)現(xiàn)key的排序

public static void main(String[] args) {

?????????

?????????

????????? Map<Person, Integer> all=new TreeMap<>();

????

????????? all.put(new Person("張三",20), 3);

?????????

????????? all.put(new Person("小強(qiáng)",999), 2);

?????????

????????? all.put(new Person("隔壁老王",89), 1);

?????????

????????? System.out.println(all);

???? }

?

?

主要掌握 HashMap? LinkedHashMap? TreeMap? HashTable 了解其實(shí)現(xiàn)類的特點(diǎn):在開發(fā)中根據(jù)實(shí)際的業(yè)務(wù)需求選擇使用相應(yīng)的實(shí)現(xiàn)類

?

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

?

通過之前提到一個(gè)方法 entrySet()

Public Set<Map.Entry<K,V>>?entrySet()? 返回值包含了 Map.entry

?

思考 Map集合中 key是不可重復(fù)的,treeMap 有序的? HashMap 是無序的 Set集合非常的相似 key底層和set實(shí)現(xiàn)的原理是一樣的 所以實(shí)際上mapset是可以相互轉(zhuǎn)換的

?

Map.entry 里面存放的是 key? value? 最終遍歷取值的也是通過map.entry?

?

范例: 實(shí)現(xiàn)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集合轉(zhuǎn)換為Set集合

?????????

????????? Set<Map.Entry<String, Integer>> set=all.entrySet();

?????????

????????? //2 遍歷set集合

????????? Iterator<Map.Entry<String, Integer>> iter=set.iterator();

?????????

????????? //循環(huán)取出迭代器中的內(nèi)容

????????? while(iter.hasNext()) {

??????????????

?????????????? Map.Entry<String, Integer> me=iter.next();

??????????????

?????????????? System.out.println(me.getKey()); //取得key的方法

??????????????

?????????????? System.out.println(me.getValue());//取得value的方法

????????? }

???? }

}

?

?

總結(jié)

以上是生活随笔為你收集整理的JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。