讷河做网站公司,佛山seo整站优化,把做的网站放到互联网上,上海建溧建设集团有限公司网站java 不可变map你好朋友#xff0c; 在本教程中#xff0c;我们将看到如何在Java中创建不可变的Map。 –不可变的类或对象是什么意思#xff1f; –什么是不可变地图#xff1f; –如何在Java中创建不可变的Map#xff1f; 不变的类或对象是什么意思#xff1f; 不可… java 不可变map 你好朋友 在本教程中我们将看到如何在Java中创建不可变的Map。 –不可变的类或对象是什么意思 –什么是不可变地图 –如何在Java中创建不可变的Map 不变的类或对象是什么意思 不可变的类或对象是其状态一旦创建就不会改变的类或对象。例如Java中的String类是不可变的因此如果我们尝试在String对象中进行更改它将创建一个新的String对象但是当前对象的状态不会改变。因此如果实例化一个不可变的类则一旦创建该实例便无法更改其状态。 什么是不可变地图 因此考虑到以上对不可变的定义不可变地图是一种我们一旦创建就无法插入更新或删除元素的地图通常要求此类地图具有不会像国家那样被更改的内容这是货币。 如何在Java中创建不可变的Map 我们可以通过多种方式创建不可变地图。 –使用Collections.unmodifiableMap –使用Map.of –使用Map.ofEntries –使用Map.copyOf 使用Collections.unmodifiableMap 当我们使用Collections.unmodifiableMaporiginalMap时它会在原始地图上创建一个视图这样我们就不能在该视图上添加删除或更新如果尝试这样做则会出现UnSupportedOperation异常但我们只能查看在原始地图中。 我们仍然可以更新原始地图并且当我们更改原始地图时更改也将反映在视图中。 因此这并不是真正意义上的创建不可变映射。但是我们仍然可以使用Collections.unmodifiableMap创建不可变映射。 对于第二个例子。 MapString, Integer originalMap1 new HashMapString, Integer(); originalMap1.put(a, 1); originalMap1.put(b, 2);originalMap1.put(c, 3);MapString, Integer unmodifiableMap1 Collections.unmodifiableMap(originalMap1);//unmodifiableMap1.put(d, 4);System.out.println(Size of originalMap1 before adding new data:originalMap1.size());System.out.println(Size of unmodifiableMap1 before adding new data: unmodifiableMap1.size());originalMap1.put(e, 5);System.out.println(Size of originalMap1 after adding new data:originalMap1.size());System.out.println(Size of unmodifiableMap1 after adding new data:unmodifiableMap1.size());例子2 MapString, Integer originalMap2 new HashMapString, Integer(); originalMap2.put(a, 1); originalMap2.put(b, 2);originalMap2.put(c, 3);MapString, Integer unmodifiableMap2 Collections.unmodifiableMap(new HashMapString, Integer(originalMap2));//unmodifiableMap2.put(d, 4);System.out.println(Size of originalMap2 before adding new data:originalMap2.size());System.out.println(Size of unmodifiableMap2 before adding new data: unmodifiableMap2.size());originalMap2.put(e, 5);System.out.println(Size of originalMap2 after adding new data:originalMap2.size());System.out.println(Size of unmodifiableMap2 after adding new data:unmodifiableMap2.size()); 在这里我们没有传递对原始地图的引用而是创建了一个HashMap的新实例将其传递给原始的hashMap然后将这个HashMap的新实例传递给Collecitons.unmodifiableMap方法。我们在此处获得的“ unmodifiableMap2”是不可变的因此即使您在原始哈希图中进行了更改也不会反映在unmodifiableMap2实例中。 使用Map.of Map.of是Java 9中引入的。以下示例是不言自明的。如果我们拥有少于等于10个键值对则应使用此方法因为如果看到Of方法的重载则最多有10个Of方法的重载中允许的键值对。 static K, V MapK, V of()
static K, V MapK, V of(K k1, V v1)
static K, V MapK, V of(K k1, V v1, K k2, V v2)
.
.
.
static K, V MapK, V of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) MapString, Integer immutableMap1 Map.of(a, 1, b,2, c,3);//immutableMap1.put(d, 4); //Will throw UnsupportedOperaironExceptionSystem.out.println(Size of immutableMap1: immutableMap1.size());使用Map.ofEntries Java 9中也引入了Map.ofEntries当我们拥有超过10个键值对时可以使用这种创建不可变映射的方法。 该方法的签名如下 static K, V MapK, V ofEntries(Entry? extends K, ? extends V... entries) MapString, Integer immutableMap2 Map.ofEntries(entry(a,1),entry(b,2),entry(c,3));//immutableMap2.put(d, 4);System.out.println(Size of immutableMap2 :immutableMap2.size());使用Map.copyOf Java 10中引入了Map.copyOf。 该方法的签名如下 static K, V MapK, V copyOf(Map? extends K, ? extends V map) MapString, Integer originalMap5 new HashMapString, Integer(); originalMap5.put(a, 1); originalMap5.put(b, 2);originalMap5.put(c, 3);MapString, Integer immutableMap3 Map.copyOf(originalMap5);//immutableMap3.put(d, 4);System.out.println(Size of originalMap5 before adding new data:originalMap5.size());originalMap5.put(e, 5);System.out.println(Size of originalMap5 after adding new data:originalMap5.size());System.out.println(Size of immutableMap3 after adding new data:immutableMap3.size()); package com.blogspot.javasolutionsguide.immutable_map_java_example;import static java.util.Map.entry;import java.util.Collections;
import java.util.HashMap;
import java.util.Map;/*** ImmutableMapTest.**/
public class ImmutableMapTest
{public static void main( String[] args ) {//Unmodifiable MapString, Integer originalMap1 new HashMapString, Integer(); originalMap1.put(a, 1); originalMap1.put(b, 2);originalMap1.put(c, 3);MapString, Integer unmodifiableMap1 Collections.unmodifiableMap(originalMap1);//unmodifiableMap1.put(d, 4);System.out.println(Size of originalMap1 before adding new data:originalMap1.size());originalMap1.put(e, 5);System.out.println(Size of originalMap1 after adding new data:originalMap1.size());System.out.println(Size of unmodifiableMap1 after adding new data:unmodifiableMap1.size());//Example 2MapString, Integer originalMap2 new HashMapString, Integer(); originalMap2.put(a, 1); originalMap2.put(b, 2);originalMap2.put(c, 3);MapString, Integer unmodifiableMap2 Collections.unmodifiableMap(new HashMapString, Integer(originalMap2));//unmodifiableMap2.put(d, 4);System.out.println(Size of originalMap2 before adding new data:originalMap2.size());originalMap2.put(e, 5);System.out.println(Size of originalMap2 after adding new data:originalMap2.size());System.out.println(Size of unmodifiableMap2 after adding new data:unmodifiableMap2.size());//Example 3MapString, Integer immutableMap1 Map.of(a, 1, b,2, c,3);//immutableMap1.put(d, 4); //Will throw UnsupportedOperaironExceptionSystem.out.println(Size of immutableMap1: immutableMap1.size());//Example 4MapString, Integer immutableMap2 Map.ofEntries(entry(a,1),entry(b,2),entry(c,3));//immutableMap2.put(d, 4);System.out.println(Size of immutableMap2 :immutableMap2.size());//Example 5MapString, Integer originalMap5 new HashMapString, Integer(); originalMap5.put(a, 1); originalMap5.put(b, 2);originalMap5.put(c, 3);MapString, Integer immutableMap3 Map.copyOf(originalMap5);//immutableMap3.put(d, 4);System.out.println(Size of originalMap5 before adding new data:originalMap5.size());originalMap5.put(e, 5);System.out.println(Size of originalMap5 after adding new data:originalMap5.size());System.out.println(Size of immutableMap3 after adding new data:immutableMap3.size());}
}总结 因此在本教程中我们了解了如何在Java中创建不可变映射。当我们知道将来映射的内容不会改变时这非常有用。我们了解了JDK如何使用各种方法来创建不可变映射。 谢谢阅读。 订阅我们的博客以获取更多此类有趣的帖子。 翻译自: https://www.javacodegeeks.com/2020/03/how-to-create-immutabe-map-in-java.htmljava 不可变map