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
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.
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);
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.
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.
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[]
.