赞
踩
Collections.unmodifiableList
是 Java Collections Framework 提供的一个方法,用于创建一个不可修改的视图(unmodifiable view)列表。这个方法返回的列表是对原始列表的一个包装,任何对这个包装列表的修改操作都会抛出 UnsupportedOperationException
。
Collections.unmodifiableList
来创建一个不可修改的视图。以下是如何使用 Collections.unmodifiableList
的示例:
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class UnmodifiableListExample { public static void main(String[] args) { // 创建一个可修改的列表 List<String> modifiableList = new ArrayList<>(); modifiableList.add("Apple"); modifiableList.add("Banana"); modifiableList.add("Cherry"); // 创建一个不可修改的视图列表 List<String> unmodifiableList = Collections.unmodifiableList(modifiableList); // 输出不可修改的列表 System.out.println("Unmodifiable List: " + unmodifiableList); // 尝试修改不可修改的列表(会抛出 UnsupportedOperationException) try { unmodifiableList.add("Date"); } catch (UnsupportedOperationException e) { System.out.println("Cannot modify unmodifiable list: " + e.getMessage()); } // 修改原始列表 modifiableList.add("Date"); // 输出不可修改的列表(会反映原始列表的修改) System.out.println("Unmodifiable List after modifying original list: " + unmodifiableList); } }
ArrayList
,并添加一些元素。Collections.unmodifiableList
方法创建一个不可修改的视图列表。UnsupportedOperationException
。Collections.unmodifiableList
返回的列表只是一个视图,原始列表的修改会反映到这个视图中。Collections.unmodifiableList
并不保证线程安全。如果需要线程安全的不可修改列表,可以使用 Collections.synchronizedList
和 Collections.unmodifiableList
结合使用。如果需要线程安全的不可修改列表,可以这样做:
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ThreadSafeUnmodifiableListExample { public static void main(String[] args) { // 创建一个线程安全的可修改列表 List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>()); synchronizedList.add("Apple"); synchronizedList.add("Banana"); synchronizedList.add("Cherry"); // 创建一个不可修改的视图列表 List<String> unmodifiableList = Collections.unmodifiableList(synchronizedList); // 输出不可修改的列表 System.out.println("Unmodifiable List: " + unmodifiableList); // 尝试修改不可修改的列表(会抛出 UnsupportedOperationException) try { unmodifiableList.add("Date"); } catch (UnsupportedOperationException e) { System.out.println("Cannot modify unmodifiable list: " + e.getMessage()); } // 修改原始列表 synchronizedList.add("Date"); // 输出不可修改的列表(会反映原始列表的修改) System.out.println("Unmodifiable List after modifying original list: " + unmodifiableList); } }
通过这种方式,可以确保列表在多线程环境下的安全性,同时防止对列表的修改。
在 Java 中,有多种方法可以复制一个 List
。以下是一些常见的方法:
ArrayList
构造函数你可以使用 ArrayList
的构造函数来创建一个新的 ArrayList
,并将原始列表的元素复制到新的列表中。
import java.util.ArrayList; import java.util.List; public class ListCopyExample { public static void main(String[] args) { List<String> originalList = new ArrayList<>(); originalList.add("Apple"); originalList.add("Banana"); originalList.add("Cherry"); // 使用 ArrayList 构造函数复制列表 List<String> copiedList = new ArrayList<>(originalList); // 输出复制的列表 System.out.println("Copied List: " + copiedList); } }
Collections.copy
Collections.copy
方法可以将一个列表的内容复制到另一个列表中。需要注意的是,目标列表必须有足够的空间来容纳源列表的所有元素。
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ListCopyExample { public static void main(String[] args) { List<String> originalList = new ArrayList<>(); originalList.add("Apple"); originalList.add("Banana"); originalList.add("Cherry"); // 创建一个大小相同的目标列表 List<String> copiedList = new ArrayList<>(Collections.nCopies(originalList.size(), (String) null)); // 使用 Collections.copy 复制列表 Collections.copy(copiedList, originalList); // 输出复制的列表 System.out.println("Copied List: " + copiedList); } }
addAll
方法你可以使用 addAll
方法将一个列表的所有元素添加到另一个列表中。
import java.util.ArrayList; import java.util.List; public class ListCopyExample { public static void main(String[] args) { List<String> originalList = new ArrayList<>(); originalList.add("Apple"); originalList.add("Banana"); originalList.add("Cherry"); // 创建一个新的列表 List<String> copiedList = new ArrayList<>(); // 使用 addAll 方法复制列表 copiedList.addAll(originalList); // 输出复制的列表 System.out.println("Copied List: " + copiedList); } }
stream
和 Collectors.toList
你可以使用 Java 8 的 stream
API 和 Collectors.toList
方法来复制一个列表。
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ListCopyExample { public static void main(String[] args) { List<String> originalList = new ArrayList<>(); originalList.add("Apple"); originalList.add("Banana"); originalList.add("Cherry"); // 使用 stream 和 Collectors.toList 复制列表 List<String> copiedList = originalList.stream().collect(Collectors.toList()); // 输出复制的列表 System.out.println("Copied List: " + copiedList); } }
clone
方法(适用于 ArrayList
)如果你使用的是 ArrayList
,可以直接使用其 clone
方法来复制列表。
import java.util.ArrayList; import java.util.List; public class ListCopyExample { public static void main(String[] args) { List<String> originalList = new ArrayList<>(); originalList.add("Apple"); originalList.add("Banana"); originalList.add("Cherry"); // 使用 clone 方法复制列表 List<String> copiedList = (List<String>) ((ArrayList<String>) originalList).clone(); // 输出复制的列表 System.out.println("Copied List: " + copiedList); } }
以上方法都可以用来复制一个 List
,具体选择哪种方法取决于你的需求和使用场景。如果你需要一个简单的、快速的复制,可以使用 ArrayList
构造函数或 addAll
方法。如果你需要更灵活的操作,可以考虑使用 stream
和 Collectors.toList
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。