Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - 集合工厂方法



集合的工厂方法

在 Java 9 中,集合得到了增强,增加了一些新的方法来以简单且简洁的方式创建不可变列表。这些新的工厂方法被添加到ListSetMap接口中,用于创建不可变实例。这些工厂方法主要是为了以更简洁的方式创建集合而提供的便利工厂方法。

语法

在 Java 9 之前,使用以下语法创建不可变列表。

List unmodifiableList = Collections.unmodifiableList(arrayList);

其中 arrayList 是一个可变列表实例。因此,我们需要创建一个列表,然后使用unmodifiableList()从该列表中获取一个不可变实例,我们无法从该实例中添加/删除元素。

List 接口的工厂方法

现在从 Java 9 开始,可以使用以下方法创建不可变列表。

static <E> List<E> of();
static <E> List<E> of(E e1);
static <E> List<E> of(E... elements)
static <E> List<E> of(E e1, E e2);
static <E> List<E> of(E e1, E e2, E e3);
static <E> List<E> of(E e1, E e2, E e3, E e4);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8,E e9);
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8,E e9, E e10);

语法

因此,从 Java 9 开始,可以使用以下语法创建不可变列表。of(E... elements) 方法可用于在不可变列表中拥有超过 10 个元素。

List<String> unmodifiableList = List.of("A", "B", "C");

Java 9 之前 List 接口工厂方法的示例

在这里,我们在 Java 9 之前创建了不可修改的列表。

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Tester {
   public static void main(String[] args) {
      List<String> list = new ArrayList<>();

      list.add("A");
      list.add("B");
      list.add("C");
      list = Collections.unmodifiableList(list);
      System.out.println(list);
   }  
}

让我们编译并运行上述程序,这将产生以下结果 -

[A, B, C]

Java 9 中 List 接口工厂方法的示例

在这里,我们在 Java 9 中创建了不可修改的列表。

package com.tutorialspoint;

import java.util.List;

public class Tester {
   public static void main(String[] args){
	   List<String> list =  List.of("A","B","C");
	   System.out.println(list);
   }  
}

让我们编译并运行上述程序,这将产生以下结果 -

[A, B, C]

Set 接口的工厂方法

类似地,Set 接口也包含这些新方法来创建不可修改的 Set,以获取一个无法添加/删除元素的 Set 实例。

static <E> Set<E> of();
static <E> Set<E> of(E e1);
static <E> Set<E> of(E... elements)
static <E> Set<E> of(E e1, E e2);
static <E> Set<E> of(E e1, E e2, E e3);
static <E> Set<E> of(E e1, E e2, E e3, E e4);
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5);
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6);
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7);
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8);
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8,E e9);
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8,E e9, E e10);

语法

因此,从 Java 9 开始,可以使用以下语法创建不可变集合。of(E... elements) 方法可用于在不可变集合中拥有超过 10 个元素。

Set<String> unmodifiableSet = Set.of("A", "B", "C");

Java 9 之前 Set 接口工厂方法的示例

在这里,我们在 Java 9 之前创建了不可修改的集合。

package com.tutorialspoint;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class Tester {
   public static void main(String[] args){
      Set<String> set = new HashSet<>();
      set.add("A");
      set.add("B");
      set.add("C");
      set = Collections.unmodifiableSet(set);
      System.out.println(set);
   }  
}

让我们编译并运行上述程序,这将产生以下结果 -

[A, B, C]

Java 9 中 Set 接口工厂方法的示例

在这里,我们在 Java 9 中创建了不可修改的集合。

package com.tutorialspoint;

import java.util.Set;

public class Tester {
   public static void main(String[] args){
	   Set<String> set =  Set.of("A","B","C");
	   System.out.println(set);
   }  
}

让我们编译并运行上述程序,这将产生以下结果 -

[A, B, C]

Map 接口的工厂方法

对于 Map 接口,我们可以使用 ofEntries(...) 来接受 var args 参数,而不是像下面所示的 of() 方法。

static <K,V> Map<K,V> of();
static <K,V> Map<K,V> of(K k1, V v1);
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5);
static <K,V> Map<K,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);
static <K,V> Map<K,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);
static <K,V> Map<K,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);
static <K,V> Map<K,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);
static <K,V> Map<K,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 k1, V v10);

因此,从 Java 9 开始,可以使用以下语法创建不可变映射。

Map<String, String> unmodifiableMap = Map.of("A","Apple", "B", "Boy", "C", "Cat");

Java 9 之前 Map 接口工厂方法的示例

在这里,我们在 Java 9 之前创建了不可修改的 Map。

package com.tutorialspoint;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class Tester {
   public static void main(String[] args){
      Map<String, String> map = new HashMap<>();

      map.put("A","Apple");
      map.put("B","Boy");
      map.put("C","Cat");
      map = Collections.unmodifiableMap(map);
      System.out.println(map);
   }  
}

让我们编译并运行上述程序,这将产生以下结果 -

{A=Apple, B=Boy, C=Cat}

Java 9 中 Map 接口工厂方法的示例

在这里,我们在 Java 9 中创建了不可修改的 Map。

package com.tutorialspoint;

import java.util.Map;

public class Tester {
   public static void main(String[] args){
      Map<String, String> map = Map.of("A","Apple","B","Boy","C","Cat");
      System.out.println(map);
   }  
}

让我们编译并运行上述程序,这将产生以下结果 -

{C=Cat, A=Apple, B=Boy}
广告