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
LinkedHashSet
是 HashSet
的有序版本,它在所有元素中维护一个双向链表。 当需要维护迭代顺序时,使用此类。 当遍历 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 的层次结构
属性 | LinkedHashMap 和 LinkedHashSet |
---|---|
顺序 | LinkedHashMap 和 LinkedHashSet 都维护插入顺序,元素按照添加它们的顺序进行排序。 |
同步 | 两者都不同步,必须在外部同步。 |
重复 | LinkedHashMap 将键映射到值,因此它没有重复,而 LinkedHashSet 只是存储没有重复的事物的集合。 |
内存 | 在 LinkedHashmap 和 LinkedHashset 中保持插入顺序会产生额外的相关成本,包括花费额外的 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 只是存储具有一个空值的事物的集合。 |