ho voluto mettere alla prova come ottenere intersezione tra due liste, qui è il mio codice:eccezione Lista retainAll
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
List<Integer> list2 = list.subList(2, 5);
System.out.println(list.subList(2, 5));
System.out.println(list.containsAll(list.subList(2, 5)));
System.out.println(list.retainAll(list2));
Questo produce:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
at java.util.AbstractCollection.retainAll(Unknown Source)
at gov.noaa.nhc.App.main(App.java:48)
Ma io non sto facendo nessun rimuove. Perché questa eccezione produce?
Aggiornamento I:
Usando:
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = list.subList(2, 5);
produce:
java.util.ConcurrentModificationException
Dal lista2 è sostenuta da lista1, la rimozione di elementi da lista1 farò questa eccezione. Versione Infine lavorando:
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = Arrays.asList(18, 19, 20);
o
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(18, 19, 20));
o
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = new ArrayList<Integer>(list.subList(2, 5));
Grazie per le vostre risposte a tutti.
'UnsupportedOperationException' - se l'operazione' retainAll' non è supportata da questa raccolta. – user845279
Usando il tuo esempio ottengo Exception in thread "main" java.util.ConcurrentModificationException –
Questo perché hai usato la funzione 'subList()'. 'list2' è supportato da' list'. La funzione 'retainAll' usa un iteratore per cancellare i valori non intersecanti - questo causa' ConcurrentModificationException'. Puoi leggere 'Iterator' e le modifiche simultanee su Javadocs. – user845279