Java Hashtable遍歷與方法使用


參考文檔

我參考了Java 集合系列11之 Hashtable詳細介紹(源碼解析)和使用示例,閱讀了jdk 1.8的源碼

Hashtable的繼承關系

Hashtable繼承了Dictionary類,實現了Map、Cloneable、Serializable接口

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable

Hashtable數據結構

依賴的數組和鏈表,跟HashMap不一樣的

Hashtable是線程安全的

共有方法就是線程安全的方法

Hashtable遍歷方法

通過entrySet()去遍歷,效率高
通過keySet()去遍歷key,效率低
通過values遍歷
通過Enumeration keys遍歷
通過Enumeration elements遍歷

使用例子

import lombok.extern.slf4j.Slf4j;

import java.io.ObjectStreamException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;

@Slf4j
public class HashtableTest {
    public static void main(String[] args) {
        Hashtable hashtable = new Hashtable();
        Random ran = new Random();
        for (int i = 0; i < 5; i++) {
            int tmp=ran.nextInt(1000);
            hashtable.put(Integer.valueOf(i),String.valueOf(tmp));
        }
        //測試遍歷
        iteratorEntrySet(hashtable);
        iteratorKeySet(hashtable);
        iteratorValues(hashtable);
        enumerationKeys(hashtable);
        enumerationElements(hashtable);
        //打印table
        log.info("table :{}",hashtable);
        //鍵值對個數
        log.info("table size {}",hashtable.size());
        //包含鍵
        log.info("contans key 1 :{}",hashtable.containsKey(Integer.valueOf(1)));
        //包含values

        //remove key
        log.info("remove key :{}",hashtable.remove(Integer.valueOf(1)));
        log.info("after remove ,table size {}",hashtable.size());
        //clear
        log.info("clear table ");
        hashtable.clear();
        //is empety
        log.info("is empty: {}", hashtable.isEmpty());
    }

    //entrySet()去遍歷
    public static void iteratorEntrySet(Hashtable hashtable) {
        Set entry = hashtable.entrySet();
        Iterator<Map.Entry> it = entry.iterator();
        log.info("iteratorEntrySet:");
        while (it.hasNext()) {
            Map.Entry entry1=it.next();
            log.info("key :{}, value :{}", entry1.getKey(), entry1.getValue());
            //下面的邏輯是錯誤的,it.next()執行了兩次,可能為空
            //log.info("key :{}, value :{}", it.next().getKey(), it.next().getValue());
        }
    }
    //keySet()去遍歷key
    public  static void iteratorKeySet(Hashtable hashtable){
        Set set =hashtable.keySet();
        log.info("iteratorKeySet");
        Iterator it =set.iterator();
        while(it.hasNext()){
            Object key =it.next();
            log.info("key :{}, value :{}",key,hashtable.get(key));

        }
    }
    //values遍歷
    public  static void iteratorValues(Hashtable hashtable){
        Collection values=hashtable.values();
        log.info("iteratorValues");
        Iterator it =values.iterator();
        while(it.hasNext()){
            log.info("value :{}",it.next());
        }

    }
    //Enumeration keys遍歷
    //內部類實現接口Enumeration,通過TYPE實現hasMoreElements() nextElement()方法
    public  static void enumerationKeys(Hashtable hashtable){
        Enumeration keys = hashtable.keys();
        log.info("enumerationKeys");
        while(keys.hasMoreElements()){
            Object key =keys.nextElement();
            log.info("key :{}, value :{}",key,hashtable.get(key));
        }
    }
    //Enumeration elements遍歷
    public  static void enumerationElements(Hashtable hashtable){
        Enumeration values =hashtable.elements();
        log.info("enumerationElements");
        while(values.hasMoreElements())
        {
            Object value =values.nextElement();
            log.info("value : {}",value);
        }
    }
}

運行結果

D:\zxems\work\OpenJdk\8\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\lib\idea_rt.jar=52315:D:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\bin" -Dfile.encoding=GB2312 -classpath D:\zxems\work\OpenJdk\8\jre\lib\charsets.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\access-bridge-64.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\cldrdata.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\dnsns.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\jaccess.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\localedata.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\nashorn.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunec.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunjce_provider.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunmscapi.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunpkcs11.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\zipfs.jar;D:\zxems\work\OpenJdk\8\jre\lib\jce.jar;D:\zxems\work\OpenJdk\8\jre\lib\jsse.jar;D:\zxems\work\OpenJdk\8\jre\lib\management-agent.jar;D:\zxems\work\OpenJdk\8\jre\lib\resources.jar;D:\zxems\work\OpenJdk\8\jre\lib\rt.jar;D:\My\code\javalearn\java-learn\target\classes;D:\My\tools\maven\repo\org\slf4j\slf4j-log4j12\1.7.2\slf4j-log4j12-1.7.2.jar;D:\My\tools\maven\repo\org\slf4j\slf4j-api\1.7.2\slf4j-api-1.7.2.jar;D:\My\tools\maven\repo\log4j\log4j\1.2.17\log4j-1.2.17.jar java.javabase.map.HashtableTest
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - iteratorEntrySet:
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :4, value :771
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :3, value :567
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :2, value :933
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :1, value :421
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :0, value :304
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - iteratorKeySet
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :4, value :771
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :3, value :567
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :2, value :933
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :1, value :421
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :0, value :304
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - iteratorValues
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - value :771
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - value :567
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - value :933
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - value :421
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - value :304
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - enumerationKeys
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :4, value :771
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :3, value :567
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :2, value :933
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :1, value :421
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - key :0, value :304
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - enumerationElements
2019-07-15 16:57:21,254   [main] INFO  java.javabase.map.HashtableTest  - value : 771
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - value : 567
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - value : 933
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - value : 421
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - value : 304
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - table :{4=771, 3=567, 2=933, 1=421, 0=304}
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - table size 5
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - contans key 1 :true
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - remove key :421
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - after remove ,table size 4
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - clear table 
2019-07-15 16:57:21,269   [main] INFO  java.javabase.map.HashtableTest  - is empty: true

Process finished with exit code 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM