为什么Java里的Arrays.asList不能用add和remove方法
答案:1 悬赏:30 手机版
解决时间 2021-11-13 21:48
- 提问者网友:回忆在搜索
- 2021-11-13 03:35
为什么Java里的Arrays.asList不能用add和remove方法
最佳答案
- 五星知识达人网友:鸠书
- 2021-11-13 04:15
因为该方法返回出来的是Arrays类的一个内部类
该内部类继承抽象类AbstractList实现List
而该类并未对add和remove方法进一步实现
所以只是一个固态列表,,不可改变内容
Arrays部分源码如下:
public staticList 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)
{
if(array==null) throw new NullPointerException();
a=array;
}
public int size()
{
return a.length;
}
public Object[] toArray()
{
return a.clone();
}
publicT[] toArray(T[] a)
{
int size=size();
if(a.length)a.getClass());
System.arraycopy(this.a,0,a,0,size);
if(a.length>size) a[size]=null;
return a;
}
public E get(int index)
{
return a[index];
}
public E set(int index,E element)
{
E oldValue=a[index];
a[index]=element;
return oldValue;
}
public int indexOf(Object o)
{
if(o==null)
{
for(int i=0;i if(a[i]==null) return i;
}
else
{
for(int i=0;i if(o.equals(a[i])) return i;
}
return -1;
}
public boolean contains(Object o)
{
return indexOf(o)!=-1;
}
}不要被这个名字给误导,,,容易和java.util.ArrayList搞混
总结
Arrays.asList()返回的列表只能用作遍历
该内部类继承抽象类AbstractList实现List
而该类并未对add和remove方法进一步实现
所以只是一个固态列表,,不可改变内容
Arrays部分源码如下:
public static
{
return new ArrayList
}
private static class ArrayList
{
private static final long serialVersionUID=-2764017481108945198L;
private final E[] a;
ArrayList(E[] array)
{
if(array==null) throw new NullPointerException();
a=array;
}
public int size()
{
return a.length;
}
public Object[] toArray()
{
return a.clone();
}
public
{
int size=size();
if(a.length
System.arraycopy(this.a,0,a,0,size);
if(a.length>size) a[size]=null;
return a;
}
public E get(int index)
{
return a[index];
}
public E set(int index,E element)
{
E oldValue=a[index];
a[index]=element;
return oldValue;
}
public int indexOf(Object o)
{
if(o==null)
{
for(int i=0;i if(a[i]==null) return i;
}
else
{
for(int i=0;i if(o.equals(a[i])) return i;
}
return -1;
}
public boolean contains(Object o)
{
return indexOf(o)!=-1;
}
}不要被这个名字给误导,,,容易和java.util.ArrayList
总结
Arrays.asList()返回的列表只能用作遍历
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯