import java.util.Arrays;
import java.util.List;
public class FixedSizeListExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c");
// 尝试添加元素会抛出UnsupportedOperationException
try {
list.add("d");
} catch (UnsupportedOperationException e) {
e.printStackTrace();
}
// 尝试删除元素同样会抛出UnsupportedOperationException
try {
list.remove("b");
} catch (UnsupportedOperationException e) {
e.printStackTrace();
}
}
}
import java.util.Arrays;
import java.util.List;
public class ModifyOriginalArrayExample {
public static void main(String[] args) {
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
// 修改数组元素
array[1] = "B";
// 列表中的元素也被修改了
System.out.println(list); // 输出 [a, B, c]
}
}
import java.util.Arrays;
import java.util.List;
public class TypeErasureExample {
public static void main(String[] args) {
// 泛型数组
Integer[] integerArray = {1, 2, 3};
// 转换为列表,由于类型擦除,实际类型是Object[]
List list = Arrays.asList(integerArray);
// 尝试获取第一个元素作为Integer类型,会失败,因为list的元素是Object类型
Integer firstElement = (Integer) list.get(0); // 需要强制类型转换
System.out.println(firstElement); // 输出 1
// 尝试添加元素时,由于list是Object[]的包装,添加的元素会被当作整个数组对象
list.add(4); // 这会抛出UnsupportedOperationException
// 更好的做法是使用泛型来确保类型安全
List<Integer> integerList = Arrays.asList(1, 2, 3);
// 这样可以直接获取Integer类型的元素,不需要强制类型转换
Integer firstIntegerElement = integerList.get(0);
System.out.println(firstIntegerElement); // 输出 1
}
}
import java.util.Arrays;
import java.util.List;
public class NullPointerExceptionExample {
public static void main(String[] args) {
String[] nullArray = null;
// 尝试将null数组转换为列表会抛出NullPointerException
try {
List<String> list = Arrays.asList(nullArray);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
}
import java.util.Arrays;
import java.util.List;
public class AutoBoxingExample {
public static void main(String[] args) {
int[] primitiveIntArray = {1, 2, 3};
// 自动装箱为Integer对象数组
List<Integer> list = Arrays.asList(primitiveIntArray);
// list的大小为1,因为整个int数组被当作一个元素
System.out.println(list.size()); // 输出 1
// 正确的转换方式
List<Integer> correctList = Arrays.stream(primitiveIntArray).boxed().collect(Collectors.toList());
}
}
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class NullElementExample {
public static void main(String[] args) {
List<String> listWithNulls = Arrays.asList("a", null, "c");
// 尝试将包含null的列表转换为HashSet会抛出NullPointerException
try {
Set<String> set = new HashSet<>(listWithNulls);
} catch (NullPointerException e) {
e.printStackTrace();
}
// 正确的做法是先过滤掉null元素
Set<String> safeSet = listWithNulls.stream()
.filter(s -> s != null)
.collect(Collectors.toSet());
}
为了避免这些问题,你应该根据具体需求选择合适的集合类型,并在转换之前对数组进行必要的检查和处理。同时,了解Java集合框架和类型系统的特性也是非常重要的。如果需要动态地添加或删除元素,或者需要处理基本数据类型数组,那么使用ArrayList
或其他类型的集合可能是一个更好的选择。