不能使用< code>add或< code>remove等方法修改由< code>Arrays.asList返回的< code>List。但是如果您将它传递给< code>Collections.sort方法,它可以毫无问题地对数组进行排序(我预计会出现异常)。这似乎是一种非常不一致的行为。那么< code>List上允许的操作是什么呢,它由< code>asList方法返回?
List<Integer> list = Arrays.asList(5,7, 10 , 8,9);
list.remove(2);//Exception
Collections.sort(list);//Ok, No Exception Sort...
System.out.println(list);
我在文档中找不到这方面的任何线索。
编辑:是的,我能理解为什么它不支持< code >删除或< code >添加。但是它怎么支持排序呢?
数组.asList
为您提供了一个由您提供给它的数组支持的列表
。数组是固定大小的。包装 List
支持与数组相同的操作,因此您可以重新分配条目,但不能更改其长度。
< code>Arrays.asList返回由数组支持的固定大小的< code >列表。因此,不支持< code>remove和< code>add。支持< code>set。您可以查看这个< code>List,就好像它的行为完全像一个数组一样。数组的长度是固定的。不能添加或移除元素,但可以为数组的索引赋值,这相当于< code>List的< code>set方法。你可以对数组进行排序。
< code > collections . sort(List)不改变< code>List的大小,因此可以对固定大小的列表进行排序。要对< code>List进行排序,您只需交换< code>List的元素。为此,< code>set(index,element)就足够了。
所有这些信息都可以在数组
的爪哇多克中找到:
/**
* 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)
如果你看一下集合.sort
的实现,你会看到它实际上对一个数组进行了排序。修改列表
所需的唯一 List
方法是列表的 ListIterator
的集合,它调用列表
的集合(索引,元素)
方法。
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
相反,将引发“UnsupportedOperationException”。看起来ContainerRequest没有从修改的请求中提取UserPrincipal。 修改是通过 问题是如何将主体信息从HttpServerProbe传输到ContainerRequestFilter。request具有安全信息(在本例中是SSL客户机证书信息),而com.sun.jersey.spi.containe
我不知道;我不太明白在哪里可以抛出这个异常。 例如,我正在实现
我想从excel(.xlsx)文件中读取超过60万行。 我使用的是ApachePOI和xlsx拖缆。 Apache poi版本为3.15,因为xlsx streamer在上述版本中不支持 我只想迭代特定的列。我尝试过的是: 我得到这个例外,几乎没有警告 第35行是
下面是在strList5的subList.clear()调用中引发异常的代码: 我清除子列表的方式有问题吗?或者这是8Java的臭虫?我的Java8在Mac上的版本是:java版本"1.8.0_45"Java(TM)SE运行时环境(构建1.8.0_45-b14)JavaHotSpot(TM)64位服务器VM(构建25.45-b02,混合模式)
问题内容: 在通过返回不能通过使用方法如被修改或。但是,如果将其传递给该方法,它将可以对数组进行排序而不会出现任何问题(我希望有一个例外)。这似乎是非常不一致的行为。那么,方法返回的对允许的操作是什么? 我在文档中找不到任何线索。 编辑: 是的,我可以理解为什么它不支持或。但是,它如何支持排序呢? 问题答案: 返回由数组支持的固定大小。因此,不支持。支持。您可以像对待数组一样看它。数组的长度固定。
问题内容: 当我运行以下代码时,没有输出输出。 问题答案: 当您将原始数组(以您的情况为例)传递给时,它将创建一个具有单个元素的数组- 数组本身。因此返回false。将返回true。 如果您使用代替,它将起作用。 进一步说明: 的签名为。基元不能替换泛型类型参数。因此,当您将此方法传递给an时,整个数组将被替换,并得到a。另一方面,当您将传递给该方法时,替换将获得。