Java中的LinkedHashMap和LinkedHashSet的区别

Java中的LinkedHashMap和LinkedHashSet的区别

LinkedHashMap

LinkedHashMap 就像 HashMap 一样,具有维护插入其中的元素顺序的附加功能。 HashMap 提供了快速插入、搜索和删除的优势,但它从未维护 LinkedHashMap 提供的插入轨道和插入顺序,其中元素可以按插入顺序访问。

示例:

// Java program to demonstrate
// working of LinkedHashMap
import java.util.*;

class LinkedHashMapExample {

    public static void main(String args[])
    {

        // create an instance of LinkedHashMap
        LinkedHashMap<Integer, String> lhm;
        lhm = new LinkedHashMap<Integer, String>();

        // insert element in LinkedHashMap
        lhm.put(100, "Amit");

        // insert first null key
        lhm.put(null, "Ajay");
        lhm.put(101, "Vijay");
        lhm.put(102, "Rahul");

        // insert second null key
        // which replace first null key value
        lhm.put(null, "Anuj");

        // insert duplicate
        // which replace first 102 key value
        lhm.put(102, "Saurav");

        // iterate and print the key/value pairs
        lhm.entrySet().stream().forEach((m) -> {
            System.out.println(m.getKey() + " "
                            + m.getValue());
        });
    }
}

运行结果:

100 Amit
null Anuj
101 Vijay
102 Saurav

LinkedHashSet

LinkedHashSetHashSet 的有序版本,它在所有元素中维护一个双向链表。 当需要维护迭代顺序时,使用此类。 当遍历 HashSet 时,顺序是不可预测的,而 LinkedHashSet 按照元素插入的顺序遍历元素。 当使用迭代器循环通过 LinkedHashSet 时,元素将按照它们被插入的顺序返回。

示例:

// Java program to demonstrate
// working of LinkedHashSet
import java.util.*;

class LinkedHashSetExample {

    public static void main(String args[])
    {
        // create an instance of LinkedHashSet
        LinkedHashSet<String> lhs
            = new LinkedHashSet<String>();

        // insert element in LinkedHashMap
        lhs.add("Amit");

        // insert first null key
        lhs.add(null);
        lhs.add("Vijay");
        lhs.add("Rahul");

        // insert second null key
        // which replace first null key value
        lhs.add(null);
        // insert duplicate
        lhs.add("Vijay");

        // create an iterator
        // iterate and print the elements
        Iterator<String> itr = lhs.iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

运行结果:

Amit
null
Vijay
Rahul

LinkedHashMap 和 LinkedHashSet 的层次结构

Java中的LinkedHashMap和LinkedHashSet的区别

属性 LinkedHashMap 和 LinkedHashSet
顺序 LinkedHashMapLinkedHashSet 都维护插入顺序,元素按照添加它们的顺序进行排序。
同步 两者都不同步,必须在外部同步。
重复 LinkedHashMap 将键映射到值,因此它没有重复,而 LinkedHashSet 只是存储没有重复的事物的集合。
内存 LinkedHashmapLinkedHashset 中保持插入顺序会产生额外的相关成本,包括花费额外的 CPU 周期和需要更多内存。

LinkedHashMap 和 LinkedHashSet 的区别

属性 LinkedHashMap LinkedHashSet
声明 默认构造函数声明是: LinkedHashMap lhm = new LinkedHashMap(); 默认构造函数声明是: LinkedHashSet hs = new LinkedHashSet();
类声明 public class LinkedHashMap<K, V> extends HashMap<K, V> implements Map<K, V> public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
构造函数 LinkedHashMap 接受五种类型的构造函数: LinkedHashMap() , LinkedHashMap(int initialCapacity) , LinkedHashMap(int initialCapacity, float fillRatio) , LinkedHashMap(int initialCapacity, float fillRatio, boolean Order) , LinkedHashMap(Map<? extends K, ? extends V> m) LinkedHashSet 接受四种类型的构造函数: LinkedHashSet() , LinkedHashSet(Collection<? extends E> C) , LinkedHashSet(int initialCapacity) , LinkedHashSet(int initialCapacity, float fillRatio)
操作 LinkedHashMap 将键映射到值。 LinkedHashSet 只是存储了一个东西的集合。
替换 LinkedHashMap 用重复键替换值。 LinkedHashSet 不会改变原来的值。
Null 对象 LinkedHashMap 具有键值对中的元素,因此只有一个空键和多个空值。 LinkedHashSet 只是存储具有一个空值的事物的集合。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程