Προγραμματισμός

Vector ή ArrayList - ποιο είναι καλύτερο;

Ε: Vector ή ArrayList - ποιο είναι καλύτερο και γιατί;

ΕΝΑ: Ωρες ωρες Διάνυσμα είναι καλύτερα; ωρες ωρες Λίστα Array είναι καλύτερα; μερικές φορές δεν θέλετε να χρησιμοποιήσετε ούτε. Ελπίζω να μην ψάχνατε για μια εύκολη απάντηση γιατί η απάντηση εξαρτάται από το τι κάνετε. Υπάρχουν τέσσερις παράγοντες που πρέπει να λάβετε υπόψη:

  • API
  • Συγχρονισμός
  • Ανάπτυξη δεδομένων
  • Σχέδια χρήσης

Ας εξερευνήσουμε το κάθε ένα με τη σειρά.

API

Σε Η γλώσσα προγραμματισμού Java (Addison-Wesley, Ιούνιος 2000) Οι Ken Arnold, James Gosling και David Holmes περιγράφουν το Διάνυσμα ως αναλογικό με το Λίστα Array. Έτσι, από την οπτική γωνία του API, οι δύο τάξεις είναι πολύ παρόμοιες. Ωστόσο, εξακολουθούν να υπάρχουν ορισμένες σημαντικές διαφορές μεταξύ των δύο τάξεων.

Συγχρονισμός

Διανύσματα συγχρονίζονται. Οποιαδήποτε μέθοδος αγγίζει το ΔιάνυσμαΤο περιεχόμενο είναι ασφαλές για νήματα. Λίστα Array, από την άλλη πλευρά, δεν είναι συγχρονισμένη, καθιστώντας τα, ως εκ τούτου, ασφαλή στο νήμα. Έχοντας υπόψη αυτή τη διαφορά, η χρήση συγχρονισμού θα έχει επιτυχία. Επομένως, εάν δεν χρειάζεστε μια συλλογή ασφαλούς νήματος, χρησιμοποιήστε το Λίστα Array. Γιατί να πληρώσετε το τίμημα του συγχρονισμού άσκοπα;

Ανάπτυξη δεδομένων

Εσωτερικά, και οι δύο Λίστα Array και Διάνυσμα κρατήστε το περιεχόμενό τους χρησιμοποιώντας ένα Πίνακας. Πρέπει να έχετε κατά νου αυτό το γεγονός ενώ χρησιμοποιείτε είτε στα προγράμματά σας. Όταν εισάγετε ένα στοιχείο σε ένα Λίστα Array ή α Διάνυσμα, το αντικείμενο θα χρειαστεί να επεκτείνει την εσωτερική του συστοιχία εάν εξαντληθεί από χώρο. ΕΝΑ Διάνυσμα από προεπιλογή να διπλασιάσει το μέγεθος του πίνακα του, ενώ το Λίστα Array αυξάνει το μέγεθος του πίνακα κατά 50 τοις εκατό. Ανάλογα με τον τρόπο που χρησιμοποιείτε αυτές τις τάξεις, ενδέχεται να καταλήξετε να κερδίσετε μια μεγάλη επιτυχία με την προσθήκη νέων στοιχείων. Είναι πάντα καλύτερο να ρυθμίσετε την αρχική χωρητικότητα του αντικειμένου στη μεγαλύτερη χωρητικότητα που θα χρειαστεί το πρόγραμμά σας. Ρυθμίζοντας προσεκτικά τη χωρητικότητα, μπορείτε να αποφύγετε να πληρώσετε το πρόστιμο που απαιτείται για να αλλάξετε το μέγεθος του εσωτερικού πίνακα αργότερα. Εάν δεν ξέρετε πόσα δεδομένα θα έχετε, αλλά γνωρίζετε το ρυθμό με τον οποίο αυξάνεται, Διάνυσμα έχει ένα μικρό πλεονέκτημα αφού μπορείτε να ορίσετε την τιμή αύξησης.

Σχέδια χρήσης

Και τα δύο Λίστα Array και Διάνυσμα είναι καλό για την ανάκτηση στοιχείων από μια συγκεκριμένη θέση στο δοχείο ή για την προσθήκη και αφαίρεση στοιχείων από το άκρο του δοχείου. Όλες αυτές οι λειτουργίες μπορούν να εκτελεστούν σε σταθερό χρόνο - Ο (1). Ωστόσο, η προσθήκη και η αφαίρεση στοιχείων από οποιαδήποτε άλλη θέση αποδεικνύεται πιο ακριβή - γραμμική ως ακριβής: O (n-i), όπου ν είναι ο αριθμός των στοιχείων και Εγώ είναι το ευρετήριο του στοιχείου που προστίθεται ή καταργείται. Αυτές οι λειτουργίες είναι πιο ακριβές επειδή πρέπει να αλλάξετε όλα τα στοιχεία στο ευρετήριο Εγώ και υψηλότερα από ένα στοιχείο. Τι σημαίνει λοιπόν όλα αυτά;

Αυτό σημαίνει ότι εάν θέλετε να ευρετηριάσετε στοιχεία ή να προσθέσετε και να αφαιρέσετε στοιχεία στο τέλος του πίνακα, χρησιμοποιήστε είτε a Διάνυσμα ή ένα Λίστα Array. Εάν θέλετε να κάνετε οτιδήποτε άλλο στα περιεχόμενα, πηγαίνετε να βρείτε μια άλλη κατηγορία κοντέινερ. Για παράδειγμα, το Συνδεδεμένη λίστα μπορεί να προσθέσει ή να αφαιρέσει ένα στοιχείο σε οποιαδήποτε θέση σε σταθερό χρόνο - O (1). Ωστόσο, η ευρετηρίαση ενός στοιχείου είναι λίγο πιο αργή - Ο (θ) όπου Εγώ είναι το ευρετήριο του στοιχείου. Διασχίζοντας ένα Λίστα Array είναι επίσης ευκολότερο, αφού μπορείτε απλά να χρησιμοποιήσετε ένα ευρετήριο αντί να πρέπει να δημιουργήσετε έναν επαναληπτικό. ο Συνδεδεμένη λίστα δημιουργεί επίσης ένα εσωτερικό αντικείμενο για κάθε στοιχείο που εισάγεται. Επομένως, πρέπει να γνωρίζετε τα επιπλέον σκουπίδια που δημιουργούνται.

Τέλος, στο "PRAXIS 41" από Πρακτική Java (Addison-Wesley, Φεβρουάριος 2000) Ο Peter Haggar προτείνει να χρησιμοποιήσετε έναν απλό παλιό πίνακα στη θέση των δύο Διάνυσμα ή Λίστα Array - ειδικά για έναν κρίσιμο για την απόδοση κώδικα. Χρησιμοποιώντας μια συστοιχία μπορείτε να αποφύγετε το συγχρονισμό, τις επιπλέον κλήσεις μεθόδου και τη μη βέλτιστη αλλαγή μεγέθους. Πληρώνετε απλώς το κόστος του επιπλέον χρόνου ανάπτυξης.

Μάθετε περισσότερα σχετικά με αυτό το θέμα

  • Η γλώσσα προγραμματισμού Java Ken Arnold, James Gosling και David Holmes (Addison-Wesley, Ιούνιος 2000, ISBN0201704331)

    //www.amazon.com/exec/obidos/ASIN/0201704331/javaworld/

  • Πρακτική Java Peter Haggar (Addison-Wesley, Φεβρουάριος 2000; ISBN0201616467)

    //www.amazon.com/exec/obidos/ASIN/0201616467/javaworld/

  • Θέλουν περισσότερα? Δείτε το Ε & Α Java Ευρετήριο για τον πλήρη κατάλογο ερωτήσεων και απαντήσεων

    //www.javaworld.com/javaworld/javaqa/javaqa-index.html

  • Για περισσότερες από 100 διορατικές συμβουλές Java από μερικά από τα καλύτερα μυαλά στην επιχείρηση, επισκεφτείτε JavaWorld 'μικρό Συμβουλές Java δείκτης

    //www.javaworld.com/javatips/jw-javatips.index.html

  • Εγγραφείτε στο JavaWorld αυτήν την εβδομάδα δωρεάν εβδομαδιαίο ενημερωτικό δελτίο ηλεκτρονικού ταχυδρομείου για ό, τι νέο υπάρχει JavaWorld

    //idg.net/jw-subscribe

Αυτή η ιστορία, "Vector ή ArrayList - ποιο είναι καλύτερο;" δημοσιεύθηκε αρχικά από το JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found