Avatar billede a-torsten Nybegynder
05. juni 2002 - 13:44 Der er 1 kommentar og
3 løsninger

Vector: elementAt vs. get

Hejsa...

Nogen der kan forklare mig hva forskellen på disse to er...

hvis man har:

Vector navne = new Vector();

hvis man så vil hente navn nr 5 fx...

Er der så forskel på om man siger:

navne.get(5) og navne.elementAt(5)

-Anders
Avatar billede bearhugx Nybegynder
05. juni 2002 - 14:00 #1
elementAt :
    public synchronized Object elementAt(int index) {
    if (index >= elementCount) {
        throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
    }
    try {
        return elementData[index];
    } catch (ArrayIndexOutOfBoundsException e) {
        throw new ArrayIndexOutOfBoundsException(index + " < 0");
    }
    }


get :
    public synchronized Object get(int index) {
    if (index >= elementCount)
        throw new ArrayIndexOutOfBoundsException(index);

    return elementData[index];
    }


Konklusion : elementAt bruger flere ressourcer, men tjecker for at  -1 > index >= elementCount
i modsætning til get, som kun tester  index >= elementCount...

Jeg bruger selv elementAt() , men der er ikke den store forskel :-)

/Søren
Avatar billede bearhugx Nybegynder
05. juni 2002 - 14:01 #2
PS : Den ovenstående kode er fra JDK 1.4 SE  (src.jar)
Avatar billede disky Nybegynder
05. juni 2002 - 14:24 #3
torsten der er flere små fejl i din kode.

Man bruger aldrig:

Vector navne=new Vector();

Hvis du pludselig finder ud af at ArrayList giver bedre performance (hvilket den faktisk går)

Så skal du rette mange steder i din kode.

Brug istedet altid interface type som angivelse af type, altså

List navne=new Vector();


Så kan du nemt skifte til ArrayList ved at rette til:
List navne=new ArrayList();

Dette er ikke kun noget jeg synes er godt, det er faktisk SUN der siger det, og det er alment objektorienteret princip :)

Af de to metoder du har nævnt er det en performance mæssig fordel at bruge .get().
Avatar billede soelvpil Nybegynder
05. juni 2002 - 16:42 #4
De to metoder giver næsten samme resultat, og grunden til at der er to, er nærmest af historiske årsager.

I de ældste jdk-versioner var der en Vector-klasse med en elementAt-metode. I nyere jdk-versioner (jeg tror det er fra jdk1.2) opfandt man et Collections-framework, med en masse klassser som Collection's lister, maps o.s.v. De forskellige lister fik her en get-metode. Man valgte så at passe den gamle Vector-klasse ind, ved også at give den en get-metode. Men egentlig er vector blot et levn fra gamle dage.

Den nyere udgave er ArrayList som performer lidt hurtigere, mest fordi den ikke er synkroniseret.

Så den "rigtige" metode er at sige

List navne = new ArrayList();

hvis der er behov for synkronisering, gør man i stedet sådan:

List navne = Collections.synchroizedList(new ArrayList());
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