HashMap和Hashtable的遍历

HashMap和Hashtable的遍历

HashMapHashtable
keySet()keySet()
entrySet()entrySet()
value()elements()
iteratoriterator



此外,Hashtable还可以使用keys() 和Enumeration进行遍历,闲言少叙,直接上代码

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;

public class Test {

    public static void main(String[] args) {

        int[] arr = {0,1,2,3,4,5,6,7,8,9};
        HashMap<Integer, Integer> map = new HashMap<>();
        Hashtable<Integer, Integer> table = new Hashtable<>();

        // 添加元素
        for(int i = 0; i < 10; i++) {
            map.put(arr[i], arr[i]);
            table.put(arr[i], arr[i]);
        }

        // -----------------HashMap遍历------------------------
        System.out.println("-----------------HashMap遍历------------------------");

        // 1.使用keySet()
        System.out.println("1.使用keySet()");
        for(Integer key : map.keySet()) {
            System.out.println(key + " : " + map.get(key));
        }

        // 2.使用entrySet()
        System.out.println("2.使用entrySet()");
        for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }

        // 3.使用value(),但不能得到key
        System.out.println("3.使用value(),但不能得到key");
        for(Integer i : map.values()) {
            System.out.println(i);
        }

        // 4.使用Iterator
        System.out.println("4.使用Iterator");
        Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
        while(it.hasNext()) {
            Map.Entry<Integer, Integer> entry = it.next();
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }


        // -----------------Hashtable遍历------------------------
        System.out.println("-----------------Hashtable遍历------------------------");

        // 1.使用keySet()
        System.out.println("1.使用keySet()");
        for(Integer key : table.keySet()) {
            System.out.println(key + " : " + table.get(key));
        }


        // 2.使用keys() + Enumeration
        System.out.println("2.使用keys()");
        Enumeration<Integer> en1 = table.keys();
        while(en1.hasMoreElements()) {
            int key = en1.nextElement();
            System.out.println(key + " : " + table.get(key));
        }

        // 3.使用entrySet() + iterator
        System.out.println("3.使用entrySet()");
        Iterator<Map.Entry<Integer, Integer>> it1 = table.entrySet().iterator();
        while(it1.hasNext()) {
            Map.Entry<Integer, Integer> entry = it1.next();
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }

        // 4.使用elements()
        System.out.println("4.使用elements(),相当于遍历value");
        Enumeration<Integer> en2 = table.elements();
        while(en2.hasMoreElements()) {
            System.out.println(en2.nextElement());
        }


    }
}

注:HashMap和Hashtable的存储和遍历都是无序的

这里写图片描述

HashMapHashtable 都是用于存储键值对的数据结构,它们在功能上非常相似,但也存在一些区别。 1. 线程安全性:Hashtable 是线程安全的,即多个线程可以同时访问一个 Hashtable 实例而不需要额外的同步措施。而 HashMap 不是线程安全的,如果多个线程同时访问一个 HashMap 实例,可能会导致数据不一致的问题。如果需要在多线程环境下使用,可以考虑使用 ConcurrentHashMap。 2. null 键和 null 值:Hashtable 不允许键或值为 null,如果尝试将 null 键或 null 值放入 Hashtable 中,会抛出 NullPointerException。而 HashMap 允许键和值为 null,可以正常存储和获取 null 值。 3. 继承关系:Hashtable 是 Dictionary 类的子类,而 HashMap 是 AbstractMap 类的子类。由于继承关系的不同,导致它们在实现上有一些差异。 4. 迭代顺序:HashMap 不保证迭代顺序,即遍历 HashMap 的键值对时,不一定按照插入顺序或者其他顺序进行遍历。而 Hashtable 的迭代顺序是按照插入顺序进行的。 5. 性能:由于 Hashtable 是线程安全的,它在多线程环境下的性能可能会受到一定影响。而 HashMap 在单线程环境下的性能通常会更好。 总的来说,如果在单线程环境下使用,并且需要允许键或值为 null,可以优先选择使用 HashMap。如果在多线程环境下使用,或者需要保证迭代顺序,可以考虑使用 Hashtable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值