调用代码:
String[] tmpIds = ids.split(",");
rt = Arrays.asList(tmpIds);
rt.add(String.valueOf(userId));
Arrays.asList(tmpIds)返回固定大小的list
/**
* Returns a fixed-size list backed by the specified array. (Changes to
* the returned list "write through" to the array.) This method acts
* as bridge between array-based and collection-based APIs, in
* combination with {@link Collection#toArray}. The returned list is
* serializable and implements {@link RandomAccess}.
*
*
*
* <p>This method also provides a convenient way to create a fixed-size
* list initialized to contain several elements:
* <pre>
* List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
* </pre>
*
* @param a the array by which the list will be backed
* @return a list view of the specified array
*/
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
注:asList返回固定大小的list,对list中元素的改变将“同步”到原数组。
调用add方法报UnsupportedOperationException异常,实际add方法调用的是java.util.AbstractList<E>的add方法,如下:
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
查考jdk源码如下:
public class Arrays {
//...............
//...............
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
//...............
//...............
private static class ArrayList<E> extends AbstractList<E>
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();
}
public <T> T[] toArray(T[] a) {
int size = size();
if (a.length < size)
return Arrays.copyOf(this.a, size,
(Class<? extends T[]>) 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<a.length; i++)
if (a[i]==null)
return i;
} else {
for (int i=0; i<a.length; i++)
if (o.equals(a[i]))
return i;
}
return -1;
}
public boolean contains(Object o) {
return indexOf(o) != -1;
}
}
//...............
//...............
}
调用报 java.lang.UnsupportedOperationException
分享到:
相关推荐
在Java编程中,Arrays.asList()方法和ArrayList是两种不同的方式来处理列表数据,它们之间存在显著的区别。这篇文章将深入探讨这两个概念以及它们在实际使用中的差异。 首先,Arrays.asList()是一个Java内置方法,...
在 Java 中,使用 Arrays.asList 方法可以快速创建一个 List 集合,但是需要注意的是,这个方法返回的 ArrayList 并不是 java.util.ArrayList 对象,而是一个内部类。下面我们来详细了解这个知识点。 首先,让我们...
这里的关键在于,`Arrays.asList()`返回的是一个由`Arrays`类内部定义的`ArrayList`实例,而不是`java.util.ArrayList`。这个内部`ArrayList`实现并不是标准的可变大小的列表,而是固定大小的,这解释了为什么在尝试...
这是因为这个List实际上是`java.util.Arrays`类中的一个内部静态类`java.util.Arrays.ArrayList`,它不是标准的`java.util.ArrayList`。因此,如果你尝试向这个List中添加元素,如`list.add("1")`,将会抛出`...
在代码示例中,当尝试将`Arrays.asList()`返回的对象赋值给`java.util.ArrayList`时,编译器会报错,因为它们虽然是同名,但实际上是两个不同的类型。这表明了Java类型系统对类型安全性的严格控制,不能简单地将一个...
Arrays.asList 方法返回的 List 并不是我们常用的 java.util.ArrayList,而是 Arrays 的静态内部类 java.util.Arrays.ArrayList,该类继承自抽象类 java.util.AbstractList,但没有实现 add 方法,默认抛出 java....
然而,需要注意的是,Arrays.asList()方法返回的列表不是java.util.ArrayList,而是java.util.Arrays中的一个私有静态类。这意味着,返回的列表的大小是固定的,无法添加或删除元素,否则将抛出...
**说明**:`Arrays.asList` 返回的对象实际上是 `java.util.Arrays$ArrayList` 类型,这个类并没有实现集合的修改方法。`Arrays.asList` 实现了适配器模式,它只提供了集合的接口,但底层数据仍然是数组。 **示例**...
然而,这个List并不是`java.util.ArrayList`,而是`Arrays`类的一个内部匿名类,它实现了`AbstractList`,提供了读取操作,但不支持修改操作,如添加、移除或清空元素。如果尝试调用这些方法,会抛出`...
import java.util.ArrayList; import java.util.Iterator; public class IteratorExample { public static void main(String[] args) { ArrayList<String> names = new ArrayList(); names.add("Ada Lovelace");...
ArrayList是Java中`java.util`包下的一个类,它是List接口的一个具体实现。ArrayList基于动态数组,允许我们在列表的任何位置插入和删除元素,提供了快速访问元素的能力。其内部实现通过扩容机制来保证在添加元素时...
- `Arrays.asList()`方法可以将数组转换为`List`对象,但需要注意的是,返回的是`Arrays`类中的静态内部类`ArrayList`的实例,而不是`java.util.ArrayList`。 - 使用该方法创建的`List`是不可变的,试图修改这个`...
asList方法是Arrays类的一个静态方法,用于将数组转换为List视图,但它不支持添加、删除或修改操作,因为它们会抛出UnsupportedOperationException异常。ArrayList的复制可以通过构造函数、addAll方法、Collections....