Strange UnsupportedOperationException when calling list.remove(0)

后端 未结 5 1471
故里飘歌
故里飘歌 2021-01-23 17:04

I have this method which takes a varargs of Strings, creates a List out of it, and then tries to remove the first element of the list.

public void importFrom(Str         


        
相关标签:
5条回答
  • 2021-01-23 17:26

    Arrays.asList provides a List view of the array, BACKED by the array. And arrays are not resizable. Any attempt to change its size will throw an exception.

    0 讨论(0)
  • 2021-01-23 17:29

    You could just create a new ArrayList<String>(), then loop over all files for (String file : files) fileList.add(file);. Or you could use the List you already created and add it to the new ArrayList using fileList.addAll(files);

    0 讨论(0)
  • 2021-01-23 17:30

    The returned list acts as a view for the backed array. You can not modify the list directly but only through the backed array. However, you cannot resize the array.

    0 讨论(0)
  • 2021-01-23 17:43

    Arrays.asList() returns instance of Arrays.ArrayList that that is unmodifireable list because it is a simple wrapper over array. You cannot remove elements from array.

    This is written in javadoc of asList():

    Returns a fixed-size list backed by the specified array.

    0 讨论(0)
  • 2021-01-23 17:44

    Arrays.asList only provides a thin wrapper around an array. This wrapper allows you to do most operations on an array using the List API. A quote from the JavaDoc:

    Returns a fixed-size list backed by the specified array. [...] This method acts as bridge between array-based and collection-based APIs [...]

    If you really want to remove something, then this might work:

    List<String> realList = new ArrayList<String>(Arrays.asList(stringArray));
    

    This one creates a real ArrayList (which supports remove) and fills it with the contents of another list which happens to be the wrapper around your String[].

    0 讨论(0)
提交回复
热议问题