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 只是存储具有一个空值的事物的集合。 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264233.html