Jak pokazano na obrazku, po pewnym czasie uruchomić metodę, chcę usunąć stare przedmioty i przygotować do następnej kalkulacji czasu, ale zastanawiam się, jak usunąć elementy w arraylist start ze wskazanego indeksu, podobnie jak kolejka, przestrzegaj algorytmu FIFO? Jak usunąć elementy z listy na liście startowej ze wskazanego indeksu
Odpowiedz
Można użyć List#subList(int, int):
List<Integer> list = ...
list = list.subList(10, list.size()); // creates a new list from the old starting from the 10th element
lub od subList
tworzy widok na której każda zmiana wpływa na oryginalne listy, może to być nawet lepiej:
List<Integer> list = ...
list.subList(0, 10).clear(); // clears the first 10 elements of list
Kiedy używam "purchase = (ArrayList
Logika jest poprawna, ale po prostu przyjdź z błędem – atom2ueki
@ atom2ueki nie używaj 'ArrayList' jako typu zmienna, użyj 'List' tak jak to zrobiłem z' list' w mojej odpowiedzi – Katona
Po prostu użyj do tego metody remove().
Załóżmy, że chcesz usunąć elementy z indeksami od 20 do 30 z ArrayList
:
ArrayList<String> list = ...
for (int i = 0; i < 10; i++) { // 30 - 20 = 10
list.remove(20);
}
Gdy pierwszy element o indeksie 20
usuwa elementowi 21
przenosi się do indeksu 20
. Musisz usunąć 10-krotnie element z indeksu 20
, aby usunąć kolejne 10 elementów.
twoja metoda wydaje się tylko usunąć 20. element – atom2ueki
Czy przeczytałeś zdanie poniżej kodu? Na liście tablic nie ma "dziur". Jeśli usuniesz element o indeksie 20, następny element zostanie przeniesiony do tego indeksu. – micha
Myślę, że łatwiej byłoby nie być w stanie, jeśli pętla wstecz od 30 do 20. I użyj 'list.remove (i)' – mike
Ponieważ nie piszesz aplikacji o wysokiej wydajności, złym stylem jest przechowywanie tak dużej ilości semantyki w zmiennej indeksowej.
Lepszym rozwiązaniem byłoby użycie mapy.
E. g. Map<Item, Integer> itemStock
i Map<Item, Double> prices
. Wtedy też nie miałbyś żadnych problemów z operacją usuwania.
, ale jeśli korzystasz z mapy, nadal potrzebuję identyfikatora dla każdej mapy, czy ma taką samą listę tutaj? przepraszam, nie rozumiem, co masz na myśli. – atom2ueki
Mapy nie działają z indeksami, działają z kluczami. Klucze są obiektami, to jest to, co można zrobić w OOP, łatwiej jest zachować kod z identyfikatorami niż utrzymywać kody, w których liczby całkowite mają znaczenie wykraczające poza samą liczbę. Powinieneś napisać klasę "Przedmiot" lub coś takiego. w ten sposób i użyć go jako klucza do mapy. – mike
@Katona :) idę żeby to przeczytać, nadzieje mogą znaleźć rozwiązanie – atom2ueki
w międzyczasie udało mi się sfabrykować krótką odpowiedź również – Katona