Algorytm porównujący i wynajdujący nowe elementy.

0

Witam, jaki jest najoptymalniejszy sposób na sprawdzenie, które elementu listy zawierają się w drugiej liście, Uszczegółowiając: mam dwie listy obiektów. Klasa obiektów posiada pola string, int, int ale tylko string jest unikalne i niezmienne.
Obecnie sprawdzanie mam zrobione w sposób następujący:

ArrayList<JakisObiekt> stare;
ArrayList<JakisObiekt> nowe;
......
 boolean jest = false;
 for (int i = 0; i < nowe.size(); i++) {      
            for (int j = 0; j < stare.size(); j++) {
                if (stare.get(j).getAdres().equals(nowe.get(i).getAdres())) {
                    jest = true;
                }
            }
 

Gdyby nie fakt, że pola int w obiektach się dynamicznie zmieniają użyłbym funkcji indexOf ale w tym wypadku nie mam pomysłu, a zależy mi na optymalności rozwiązania. Pozdrawiam

0

To co napisałeś, sprawdza czy listy mają przynajmniej jeden wspólny element.
Przyspieszenie - dodać w warunkach pętli (!jest)&&(tu_stary_warunek)

Natomiast to co piszesz to jest zupełnie inny algorytm.
Jeżeli możesz posortować te listy to zrób to.
Wtedy metoda wyszukiwania wspólnych elementów będzie bardzo podobna do metody scalania.
Jeżeli nie możesz to m się wydaje że opłaca się zrobić kopii tych list i je posortować.

1

ja bym kombinował z hashami, np HashMap na pewno znacznie przyspieszyło by sprawę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1