java string转list集合,list集合转成数组 Arrays.asList 存在的坑

慈云数据 2023-03-15 行业资讯 857 25

本周最后一个工作日,全力以赴。

不然我心疼哈哈哈哈

这篇文章比较简单,但是80%的Java程序员都遇到过。

引用:

阿里巴巴Java开发规范中说java string转list集合,list集合转成数组使用工具class.()方法将数组转为集合时,不能修改集合相关的方法。 它的add//clear方法会抛出()。 我们来看看为什么会出现这种情况。

问题分析

java string转list集合,list集合转成数组_string数组转list_java list转string

让我们做一个测试

public static void main(String[] args) {
 List list = Arrays.asList("a", "b", "c");
 // list.clear();
 // list.remove("a");
 // list.add("g");
 }

string数组转list_java string转list集合,list集合转成数组_java list转string

注释掉的三行可以单独取消注释,运行后确实出现了规范中提到的异常。 让我们看看 .() 做了什么。

public static  List asList(T... a) {
 return new ArrayList<>(a);
 }

看似很正常的方法,其实你点进去发现不是我们平时用的。

private static class ArrayList extends AbstractList
 implements RandomAccess, java.io.Serializable
 {
 private static final long serialVersionUID = -2764017481108945198L;
 private final E[] a;
 ArrayList(E[] array) {
 a = Objects.requireNonNull(array);
 }
 @Override
 public int size() {
 return a.length;
 }
 @Override
 public Object[] toArray() {
 return a.clone();
 }
 @Override
 @SuppressWarnings("unchecked")
 public  T[] toArray(T[] a) {
 int size = size();
 if (a.length < size)
 return Arrays.copyOf(this.a, size,
 (Class) a.getClass());
 System.arraycopy(this.a, 0, a, 0, size);
 if (a.length > size)
 a[size] = null;
 return a;
 }
 // 后面省略了

java list转string_java string转list集合,list集合转成数组_string数组转list

相反,它是一个内部类。 而这个内部类并没有add,clear,方法,所以抛出的异常其实是从哪里来的。

 public void add(int index, E element) {
 throw new UnsupportedOperationException();
 }
 public E remove(int index) {
 throw new UnsupportedOperationException();
 }

点进去就会发现抛异常的地方,底层的clear也会被调用,所以也会抛异常。

总结:不要乱用.(),底层其实就是一个数组。 如果使用.()java string转list集合,list集合转成数组,最好不要使用它的集合操作方法。 List list = new (.("a", "b", "c")) 可以像这样在外面包裹一个真实的。

评论列表

a"); // list.add("g"); }注释掉的三行可以单独取消注释,运行后确实出现了规范中提到的异常。 让我们看看 .() 做了什么。public static List asList(T... a) { return new ArrayList(a); }看似很正常的方法,其实你点进去
2023-03-15 18:12:53 回复
size() { return a.length; } @Override public Object[] toArray() { return a.clone(); } @Override @SuppressWarnings("unchecked") public T[] toArra
2023-03-15 19:24:43 回复
izable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { a = Objects.requi
2023-03-15 21:39:14 回复
() { return a.clone(); } @Override @SuppressWarnings("unchecked") public T[] toArray(T[] a) { int
2023-03-15 17:53:19 回复
rn a.clone(); } @Override @SuppressWarnings("unchecked") public T[] toArray(T[] a) { int
2023-03-15 14:37:16 回复
常。 让我们看看 .() 做了什么。public static List asList(T... a) { return new ArrayList(a); }看似很正常的方法,其实你点进去发现不是我们平时用的。private sta
2023-03-15 13:25:21 回复
tic final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { a = Objects.requireNonNull(array); } @Over
2023-03-15 14:21:18 回复
本周最后一个工作日,全力以赴。不然我心疼哈哈哈哈这篇文章比较简单,但是80%的Java程序员都遇到过。引用:阿里巴巴Java开发规范中说java string转list集合,list集合转成数组,使用工具class.()方法将数组转为集
2023-03-15 17:27:08 回复
本周最后一个工作日,全力以赴。不然我心疼哈哈哈哈这篇文章比较简单,但是80%的Java程序员都遇到过。引用:阿里巴巴Java开发规范中说java string转list集合,list集合转成数组,使用工具class.()方法将数组转为集合时,不能修改集合相
2023-03-15 13:00:21 回复
ist.add("g"); }注释掉的三行可以单独取消注释,运行后确实出现了规范中提到的异常。 让我们看看 .() 做了什么。public static List asList(T... a) { ret
2023-03-15 20:41:25 回复
bject[] toArray() { return a.clone(); } @Override @SuppressWarnings("unchecked") public T[] toArray(T[] a) { i
2023-03-15 13:21:20 回复
本周最后一个工作日,全力以赴。不然我心疼哈哈哈哈这篇文章比较简单,但是80%的Java程序员都遇到过。引用:阿里巴巴Java开发规范中说java string转list集合,list集合转成数组,使用工具class.()方法将数组转为集合时,不能修
2023-03-15 21:13:58 回复
a) { return new ArrayList(a); }看似很正常的方法,其实你点进去发现不是我们平时用的。private static class ArrayList extends Abstr
2023-03-15 12:20:30 回复
asList("a", "b", "c"); // list.clear(); // list.remove("a"); // list.add("g"); }注释掉的三行可以单独取消注释,运行后确实出现了规范中提到的异常。 让我们看看 .()
2023-03-15 20:19:44 回复
本周最后一个工作日,全力以赴。不然我心疼哈哈哈哈这篇文章比较简单,但是80%的Java程序员都遇到过。引用:阿里巴巴Java开发规范中说java string转list集合,list集合转成数组,使用工具class.()方法将数组转为集合时
2023-03-15 10:37:11 回复
r(); // list.remove("a"); // list.add("g"); }注释掉的三行可以单独取消注释,运行后确实出现了规范中提到的异常。 让我们看看 .() 做了什么。
2023-03-15 12:51:47 回复
将数组转为集合时,不能修改集合相关的方法。 它的add//clear方法会抛出()。 我们来看看为什么会出现这种情况。问题分析:让我们做一个测试public static void main(String[] args) {
2023-03-15 12:55:17 回复
rride public int size() { return a.length; } @Override public Object[] toArray() { return a.clone(); } @Override @Suppr
2023-03-15 16:04:19 回复
e(); } @Override @SuppressWarnings("unchecked") public T[] toArray(T[] a) { int size = size(); if (a.length ˂ size) return Arrays.copy
2023-03-15 19:32:05 回复
17481108945198L; private final E[] a; ArrayList(E[] array) { a = Objects.requireNonNull(array); } @Ove
2023-03-15 21:27:16 回复
n a.length; } @Override public Object[] toArray() { return a.clone(); } @Override @SuppressWarnings("unchecked") public T[] toArray(T[] a) { int siz
2023-03-15 19:17:13 回复
本周最后一个工作日,全力以赴。不然我心疼哈哈哈哈这篇文章比较简单,但是80%的Java程序员都遇到过。引用:阿里巴巴Java开发规范中说java string转list集合,list集合转成数组,使用工具class.()方法将数组转为集合时,不能修改集合相关的方法。 它的a
2023-03-15 19:56:05 回复
= size(); if (a.length ˂ size) return Arrays.copyOf(this.a, size, (Class
2023-03-15 11:42:06 回复
return new ArrayList(a); }看似很正常的方法,其实你点进去发现不是我们平时用的。private static class ArrayList extends AbstractList implements RandomAccess, java.i
2023-03-15 18:30:03 回复
ull(array); } @Override public int size() { return a.length; } @Override public Object[] toArray() { return a.clone(
2023-03-15 10:28:19 回复

发表评论:

微信扫一扫加客服

微信扫一扫加客服

微信扫一扫加客服

微信扫一扫加客服