목차
1. Vector 소개 " >1. Vector 소개
三、Vector遍历" >三、Vector遍历
3.1、随机访问" >3.1、随机访问
3.2、迭代器" >3.2、迭代器
3.2、for循环" >3.2、for循环
3.4、Enumeration循环" >3.4、Enumeration循环
Java java지도 시간 Java 개선 장(29) -----벡터

Java 개선 장(29) -----벡터

Feb 11, 2017 am 10:10 AM

Java 개선장(Two One) - ArrayList, Java 개선장(Two Two) - LinkedList에서는 ArrayList와 linkedList의 원리와 구현 과정을 자세히 설명합니다. 여기에 인터페이스 나열 또한 구현 클래스 Vector를 소개합니다. Vector 클래스는 확장 가능한 객체 배열을 구현할 수 있습니다.

1. Vector 소개

Vector는 확장 가능한 객체 배열을 구현할 수 있습니다. 배열과 마찬가지로 정수 인덱스를 사용하여 액세스할 수 있는 구성 요소를 포함합니다. 그러나 Vector가 생성된 후 추가 또는 삭제 작업을 수용하기 위해 Vector의 크기를 늘리거나 줄일 수 있습니다.

Vector는 List 인터페이스를 구현하고 AbstractList 클래스를 상속하므로 이를 대기열로 간주할 수 있으며 추가, 삭제, 수정, 순회 등 관련 기능을 지원합니다. , 등.

Vector는 랜덤 액세스와 빠른 액세스를 제공하는 RandmoAccess 인터페이스를 구현합니다. Vector에서는 요소에 직접 액세스할 수 있습니다.

      Vector는 Cloneable 인터페이스를 구현하고 clone() 메소드를 지원하며 복제가 가능합니다.

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
로그인 후 복사


 Vector는 4개의 생성자를 제공합니다.

/**
     * 构造一个空向量,使其内部数据数组的大小为 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;
    }
로그인 후 복사


Vector는 멤버 변수 측면에서 elementData, elementCount, capacityIncrement 3개를 제공합니다. 멤버변수. 그중

    elementData: "Object[] 유형의 배열", 요소를 Vector에 저장합니다. Vector의 설계에 따르면 elementData는 요소가 증가함에 따라 동적으로 증가할 수 있는 동적 배열입니다. 구체적인 증가 방법은 나중에 언급됩니다(ensureCapacity 방법). Vector를 초기화할 때 컨테이너 크기를 지정하지 않으면 기본 크기인 10이 사용됩니다.

    capacityIncrement: 벡터의 크기가 용량보다 커지면 용량이 자동으로 증가합니다. Vector를 생성할 때 capacityIncrement의 크기를 지정하면 Vector의 동적 배열 용량이 증가할 때마다 증가된 크기는 capacityIncrement가 됩니다. 용량 증가가 0보다 작거나 같으면 용량 증가가 필요할 때마다 벡터의 용량이 두 배가 됩니다. Vector

     동시에 Vector는 스레드로부터 안전합니다!

2. 소스코드 분석

remove)을 두 가지로 설명하겠습니다.

2.1 추가: add(E e)

add(E e): 지정된 요소를 여기에 추가합니다. 벡터의 끝입니다.

아아아아

 이 방법은 상대적으로 간단하며 구체적인 프로세스는 먼저 컨테이너의 크기를 확인하여 확장이 필요한지 확인한 다음 이 벡터 끝에 E 요소를 추가하는 것입니다.


public synchronized boolean add(E e) {
        modCount++;     
        ensureCapacityHelper(elementCount + 1);    //确认容器大小,如果操作容量则扩容操作
        elementData[elementCount++] = e;   //将e元素添加至末尾
        return true;
    }
로그인 후 복사

전체 확장 과정 Vector의 것은 capacityIncrement를 기준으로 확장 크기를 확인하는 것입니다.capacityIncrement <= 0이면 2배가 되고, 그렇지 않으면 capacityIncrement로 확장됩니다. 물론 이 용량의 최대 범위는 Integer.MAX_VALUE, 즉 2^32 - 1이므로 Vector를 무한히 확장할 수는 없다.


2.2, 제거(객체 o)

이런

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

三、Vector遍历

Vector支持4种遍历方式。

3.1、随机访问

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

for(int i = 0 ; i < vec.size() ; i++){
        value = vec.get(i);
    }
로그인 후 복사



3.2、迭代器


Iterator it = vec.iterator();
    while(it.hasNext()){
        value = it.next();
        //do something
    }
로그인 후 복사


3.2、for循环


for(Integer value:vec){
        //do something
    }
로그인 후 복사


3.4、Enumeration循环


Vector vec = new Vector<>();
    Enumeration enu = vec.elements();
    while (enu.hasMoreElements()) {
        value = (Integer)enu.nextElement();
    }
로그인 후 복사

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

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


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

자바의 제곱근 자바의 제곱근 Aug 30, 2024 pm 04:26 PM

자바의 제곱근

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

자바의 완전수

Java의 난수 생성기 Java의 난수 생성기 Aug 30, 2024 pm 04:27 PM

Java의 난수 생성기

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

자바의 웨카

자바의 암스트롱 번호 자바의 암스트롱 번호 Aug 30, 2024 pm 04:26 PM

자바의 암스트롱 번호

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

Java의 스미스 번호

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

Java Spring 인터뷰 질문

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까?

See all articles