Avatar billede Slettet bruger
15. november 2006 - 15:45 Der er 10 kommentarer og
1 løsning

Sammenlign objekter

Hejsa,

Hvis jeg har en array med f.eks. 50 objekter og værdierne af de 20 af dem er ens og jeg vil ikke gemme 19 af de 20 i mit array.
Hvordan gør jeg det ?
Avatar billede winners79 Nybegynder
15. november 2006 - 16:00 #1
for (int i=0;i< tal.length; i++){
            if (tal[i] != null )
                for(int i2=i+1; i2<tal.length;i2++){
                    if (tal[i] == tal[i2])
                        tal[i2]=null;
                }
        }
Avatar billede winners79 Nybegynder
15. november 2006 - 16:01 #2
Her er noget til at teste det med:   

    Integer[] tal = new Integer[50];
       
        Random random= new Random();
        for (int i=0; i< tal.length;i++)
            tal[i]= random.nextInt(10);
       
        for (Integer i: tal)
            System.out.print(i + ", ");
        System.out.println();

        for (int i=0;i< tal.length; i++){
            if (tal[i] != null )
                for(int i2=i+1; i2<tal.length;i2++){
                    if (tal[i] == tal[i2])
                        tal[i2]=null;
                }
        }

        for (Integer i: tal)
            System.out.print(i + ", ");
Avatar billede schwarz84 Nybegynder
15. november 2006 - 20:23 #3
Tja, eller en tur igennem et par library klasser skulle også kunne gøre det:

ditArray = new HashSet(Arrays.asList(ditArray)).toArray();

Så er der ikke nogen ens i arrayet det nye array har længden 31 hvis der er fjernet 19 af 50...
Avatar billede schwarz84 Nybegynder
15. november 2006 - 20:25 #4
Det er ovenikøbet mere effektivt...
Avatar billede winners79 Nybegynder
15. november 2006 - 20:42 #5
dog kan HashSets lave om på rækkefølgen, så hvis rækkefølgen er vigtig er det nok ikke så smart
Avatar billede schwarz84 Nybegynder
15. november 2006 - 20:44 #6
Ja, hashsets laver med sikkerhed om på rækkefølgen med mindre de i forvejen er sorteret efter hashcodes...
Avatar billede Slettet bruger
15. november 2006 - 21:03 #7
Jeg har ikke mulighed for at prøve schwarz metode her og nu, men hvis den virker så er den lidt nemmere at kode. Rækkefølgen gør ikke så meget, men jeg har lavet en Compare metode som kan ordne det når brugerne vil have det.
Avatar billede winners79 Nybegynder
15. november 2006 - 21:28 #8
Hvis du bruger et HashSet så husk at definere hvad der gør Objekterne ens
Avatar billede schwarz84 Nybegynder
15. november 2006 - 21:33 #9
HashSet regner 2 objecter som ens hvis de har samme hascode og equals giver true. Hvis du ikke har overskrevet equals er den det samme som ==
Avatar billede Slettet bruger
05. februar 2007 - 09:41 #10
Hmm, lidt sent, men Schwarz lig et svar og du får dine point :)
Avatar billede Slettet bruger
08. marts 2007 - 17:49 #11
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester