Inhaltsverzeichnis
1. Einführung in Vector" >1. Einführung in Vector
三、Vector遍历" >三、Vector遍历
3.1、随机访问" >3.1、随机访问
3.2、迭代器" >3.2、迭代器
3.2、for循环" >3.2、for循环
3.4、Enumeration循环" >3.4、Enumeration循环
Heim Java javaLernprogramm Java-Verbesserungskapitel (29) -----Vector

Java-Verbesserungskapitel (29) -----Vector

Feb 11, 2017 am 10:10 AM

Im Java-Verbesserungskapitel (Two One) – ArrayList, im Java-Verbesserungskapitel (Two Two) – LinkedList werden die Prinzipien und Implementierungsprozesse von ArrayList und LinkedIn ausführlich erläutert Listenschnittstelle hier Außerdem wird die Implementierungsklasse Vector vorgestellt. Die Vector-Klasse kann ein erweiterbares Objektarray implementieren.

1. Einführung in Vector

Vector kann ein erweiterbares Objektarray implementieren. Wie ein Array enthält es Komponenten, auf die über ganzzahlige Indizes zugegriffen werden kann. Die Größe des Vektors kann jedoch vergrößert oder verkleinert werden, um nach der Erstellung des Vektors Hinzufügungs- oder Löschvorgänge zu ermöglichen.

Vector implementiert die List-Schnittstelle und erbt die AbstractList-Klasse, sodass wir sie als Warteschlange betrachten können, die verwandte Funktionen wie Hinzufügen, Löschen, Ändern und Durchlaufen unterstützt , usw.

Vector implementiert die RandmoAccess-Schnittstelle, die Direktzugriff und Schnellzugriff ermöglicht. In Vector können wir direkt auf Elemente zugreifen.

      Vector implementiert die Cloneable-Schnittstelle, unterstützt die clone()-Methode und kann geklont werden.

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Nach dem Login kopieren


 Vector bietet vier Konstruktoren:

/**
     * 构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
     */
     public Vector() {
            this(10);
     }
    
    /**
     * 构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。
     */
    public Vector(Collection<? extends E> c) {
        elementData = c.toArray();
        elementCount = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, elementCount,
                    Object[].class);
    }
    
    /**
     * 使用指定的初始容量和等于零的容量增量构造一个空向量。
     */
    public Vector(int initialCapacity) {
        this(initialCapacity, 0);
    }
    
    /**
     *  使用指定的初始容量和容量增量构造一个空的向量。
     */
    public Vector(int initialCapacity, int capacityIncrement) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
    }
Nach dem Login kopieren


 In Bezug auf Mitgliedsvariablen stellt Vector drei zur Verfügung Mitgliedsvariablen elementData, elementCount und CapacityIncrement. Darunter

                                   elementData: „Array vom Typ Object[]“, das die Elemente in Vector speichert. Gemäß dem Design von Vector ist elementData ein dynamisches Array, das mit zunehmenden Elementen dynamisch wachsen kann. Die spezifische Erhöhungsmethode wird später erwähnt (ensureCapacity-Methode). Wenn die Containergröße bei der Initialisierung des Vektors nicht angegeben wird, wird die Standardgröße von 10 verwendet.

    capacityIncrement: Wenn die Größe des Vektors größer als seine Kapazität ist, wird die Kapazität automatisch um den Betrag erhöht. Wenn die Größe von „capacityIncrement“ beim Erstellen von Vector angegeben wird, beträgt die erhöhte Größe jedes Mal, wenn die Kapazität des dynamischen Arrays in Vector zunimmt. Wenn die Kapazitätserhöhung kleiner oder gleich Null ist, wird die Kapazität des Vektors jedes Mal verdoppelt, wenn eine Kapazitätserhöhung erforderlich ist. Vector

   Gleichzeitig ist Vector threadsicher!

2. Quellcode-Analyse

entfernen) wird auf zwei Arten erklärt.

2.1 hinzugefügt: add(E e)

 

add(E e): Füge das angegebene Element dazu hinzu Das Ende des Vektors.

 

Diese Methode ist relativ einfach, die spezifische Der Prozess besteht darin, zunächst die Größe des Containers zu bestätigen, um zu sehen, ob eine Erweiterung erforderlich ist, und dann das E-Element am Ende dieses Vektors hinzuzufügen.
public synchronized boolean add(E e) {
        modCount++;     
        ensureCapacityHelper(elementCount + 1);    //确认容器大小,如果操作容量则扩容操作
        elementData[elementCount++] = e;   //将e元素添加至末尾
        return true;
    }
Nach dem Login kopieren


private void ensureCapacityHelper(int minCapacity) {
        //如果
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }
    
    /**
     * 进行扩容操作
     * 如果此向量的当前容量小于minCapacity,则通过将其内部数组替换为一个较大的数组俩增加其容量。
     * 新数据数组的大小姜维原来的大小 + capacityIncrement,
     * 除非 capacityIncrement 的值小于等于零,在后一种情况下,新的容量将为原来容量的两倍,不过,如果此大小仍然小于 minCapacity,则新容量将为 minCapacity。
     */
    private void grow(int minCapacity) {
        int oldCapacity = elementData.length;     //当前容器大小
        /*
         * 新容器大小
         * 若容量增量系数(capacityIncrement) > 0,则将容器大小增加到capacityIncrement
         * 否则将容量增加一倍
         */
        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity);
        
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
    
    /**
     * 判断是否超出最大范围
     * MAX_ARRAY_SIZE:private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
     */
    private static int hugeCapacity(int minCapacity) {
        if (minCapacity < 0)
            throw new OutOfMemoryError();
        return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
    }
Nach dem Login kopieren

  
Für den gesamten Erweiterungsprozess von Vector wird die Erweiterungsgröße basierend auf CapacityInkrement bestimmt. Wenn Kapazitätsinkrement <= 0 ist, wird sie verdoppelt, andernfalls wird sie auf Kapazitätsinkrement erweitert. Der maximale Bereich dieser Kapazität ist natürlich Integer.MAX_VALUE, also 2 ^ 32 - 1, sodass Vector nicht unendlich erweitert werden kann.


2.2, entfernen(Objekt o)


因为Vector底层是使用数组实现的,所以它的操作都是对数组进行操作,只不过其是可以随着元素的增加而动态的改变容量大小,其实现方法是是使用Arrays.copyOf方法将旧数据拷贝到一个新的大容量数组中。Vector的整个内部实现都比较简单,这里就不在重述了。

三、Vector遍历

Vector支持4种遍历方式。

3.1、随机访问

因为Vector实现了RandmoAccess接口,可以通过下标来进行随机访问。

for(int i = 0 ; i < vec.size() ; i++){
        value = vec.get(i);
    }
Nach dem Login kopieren



3.2、迭代器


Iterator it = vec.iterator();
    while(it.hasNext()){
        value = it.next();
        //do something
    }
Nach dem Login kopieren


3.2、for循环


for(Integer value:vec){
        //do something
    }
Nach dem Login kopieren


3.4、Enumeration循环


Vector vec = new Vector<>();
    Enumeration enu = vec.elements();
    while (enu.hasMoreElements()) {
        value = (Integer)enu.nextElement();
    }
Nach dem Login kopieren

——————————————————————————————————————————————————————————————————————————

以上就是java提高篇(二九)-----Vector的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles