Java集合:關于 Vector 的內容盤點

Vector 與 ArrayList 一樣,也是通過數組實現的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠寫 Vector,避免多線程同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問 ArrayList 慢。
~
本篇內容包括:Vector 概述、Vector 的使用(構造方法&常用方法)、ArrayList 與 Vector 的區別以及 Stack 棧的相關知識點!


文章目錄

    • 一、Vector 概述
    • 二、Vector 的使用
        • 1、構造函數
        • 2、常用方法
    • 三、其他知識點
        • 1、ArrayList 與 Vector 的區別
        • 2、關于 Stack 棧


一、Vector 概述

Vector 與 ArrayList 一樣,也是通過數組實現的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠寫 Vector,避免多線程同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問 ArrayList慢。

Vector 的思路和 ArrayList 基本是相同的,底層是數組保存元素,Vector 默認的容量是10,有一個增量系數,如果指定,那么每次都會增加一個系數的大小,否則就擴大一倍。

Vector 擴容的時候,其實就是數組的復制,其實還是比較耗時間的,所以,我們使用的時候應該盡量避免比較消耗時間的擴容操作。

Vector 和 ArrayList 最大的不同,是它是線程安全的,幾乎每一個方法都加上了 Synchronize 關鍵字,所以它的效率相對也比較低一點。ArrayList 如果需要線程安全,可以使用 Collections.synchronizedList(new ArrayList(...)); 方法,獲取一個線程安全的 List。


二、Vector 的使用

1、構造函數

方法名方法說明
public Vector()此構造函數用于創建空向量,以使其內部數據數組的大小為10,其標準容量增量為零
public Vector(int initialCapacity)此構造函數用于創建具有指定初始容量且容量增量等于零的空向量
public Vector(int initialCapacity, int capacityIncrement)此構造函數用于創建具有指定初始容量和容量增量的空向量
public Vector(Collection<? extends E> c)此構造函數用于按照集合的迭代器返回的順序創建包含指定集合元素的向量

2、常用方法

方法名方法說明
boolean add(E o)此方法將指定的元素追加到此Vector的末尾
void add(int index, E element)此方法將指定的元素插入此Vector中的指定位置
boolean addAll(Collection<? extends E> c)此方法將指定Collection中的所有元素追加到此Vector的末尾
boolean addAll(int index, Collection<? extends E> c)此方法將指定Collection中的所有元素插入到此Vector中的指定位置
void addElement(E obj)此方法將指定的組件添加到此向量的末尾,將其大小增加1
int capacity()此方法返回此向量的當前容量
void clear()此方法從此向量中刪除所有元素
Object clone()此方法返回此向量的克隆
boolean contains(Object elem)如果此向量包含指定的元素,則此方法返回true
boolean containsAll(Collection<?> c)如果此Vector包含指定Collection中的所有元素,則此方法返回true
void copyInto(Object[] anArray)此方法將此向量的組件復制到指定的數組中
E elementAt(int index)此方法返回指定索引處的組件
Enumeration<E> elements()此方法返回此向量的組件的枚舉。
void ensureCapacity(int minCapacity)此方法可增加此向量的容量,以確保它至少可以保存最小容量參數指定的組件數
boolean equals(Object o)此方法將指定的Object與此Vector進行比較以獲得相等性
E firstElement()返回此向量的第一個組件(位于索引 0 處的項)
E get(int index)返回向量中指定位置的元素
int indexOf(Object elem)搜索給定參數的第一個匹配項,使用 equals 方法測試相等性
int indexOf(Object elem, int index)搜索給定參數的第一個匹配項,從 index 處開始搜索,并使用 equals 方法測試其相等性
void insertElementAt(E obj, int index)將指定對象作為此向量中的組件插入到指定的 index 處
boolean isEmpty()測試此向量是否不包含組件
E lastElement()返回此向量的最后一個組件
int lastIndexOf(Object elem)返回指定的對象在此向量中最后一個匹配項的索引
int lastIndexOf(Object elem, int index)向后搜索指定的對象,從指定的索引處開始搜索,并返回一個索引
E remove(int index)移除此向量中指定位置的元素
boolean remove(Object o)移除此向量中指定元素的第一個匹配項,如果向量不包含該元素,則元素保持不變
boolean removeAll(Collection<?> c)從此向量中移除包含在指定 Collection 中的所有元素
void removeAllElements()從此向量中移除全部組件,并將其大小設置為零
boolean removeElement(Object obj)從此向量中移除變量的第一個(索引最小的)匹配項
void removeElementAt(int index)刪除指定索引處的組件
protected void removeRange(int fromIndex, int toIndex)從此 List 中移除其索引位于 fromIndex(包括)與 toIndex(不包括)之間的所有元素
boolean retainAll(Collection<?> c)在此向量中僅保留包含在指定 Collection 中的元素
E set(int index, E element)用指定的元素替換此向量中指定位置處的元素
void setElementAt(E obj, int index)將此向量指定 index 處的組件設置為指定的對象
void setSize(int newSize)設置此向量的大小
int size()返回此向量中的組件數
List<E> subList(int fromIndex, int toIndex)返回此 List 的部分視圖,元素范圍為從 fromIndex(包括)到 toIndex(不包括)
Object[] toArray()返回一個數組,包含此向量中以正確順序存放的所有元素
<T> T[] toArray(T[] a)返回一個數組,包含此向量中以正確順序存放的所有元素;返回數組的運行時類型為指定數組的類型
String toString()返回此向量的字符串表示形式,其中包含每個元素的 String 表示形式
void trimToSize()對此向量的容量進行微調,使其等于向量的當前大小

三、其他知識點

1、ArrayList 與 Vector 的區別

Vector 和 ArrayList 一樣,都繼承自 List,在大多方法的實現上,Vector 較 ArrayList,就是多了一個 synchronized關鍵字

  1. Vector 是線程安全的,ArrayList 不是線程安全的
  2. ArrayList 在底層數組不夠用時在原來的基礎上擴展0.5倍,Vector 是擴展1倍

無一例外,只要是關鍵性的操作,Vector 的方法前面都加了 synchronized 關鍵字,來保證線程的安全性。當執行 synchronized 修飾的方法前,系統會對該方法加一把鎖,方法執行完成后釋放鎖,加鎖和釋放鎖的這個過程,在系統中是有開銷的,因此,在單線程的環境中,Vector效率要差很多。(多線程環境不允許用 ArrayList,需要做處理)。

和 ArrayList&Vector 一樣,同樣的類似關系的類還有 HashMap&HashTable,StringBuilder&StringBuffer,后者都是前者線程安全版本的實現實現。

2、關于 Stack 棧

棧(Stack) 是一種 后進先出(LIFO:Last In First Out) 的數據結構。

在 Java 中 Stack 類 extends Vector 棧容器,擴充了五個方法: push()peek()pop()empty()search(),棧中的方法遵循后進先出 main 方法需要等所有方法執行完彈出后才會彈出,方法的遞歸每一層都要等下一層結束/彈出才能結束/彈出。

此外,由于 Stack 是繼承自 Vector 的,而 Vector 是線程安全的,所以 Stack 也是線程安全的。然而正因為 Stack 繼承自 Vector,Stack 類已經不被官方推薦使用!!

官方推薦使用 LinkedList 來構建棧!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535531.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535531.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535531.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

memcached 的基本命令

memcached 的基本命令(安裝、卸載、啟動、配置相關)&#xff1a; -p 監聽的端口 -l 連接的 IP 地址, 默認是本機 -d start 啟動 memcached 服務 -d restart 重起 memcached 服務 -d stop|shutdown 關閉正在運行的 memcached 服務 -d install 安裝 memcached 服務 -d uninstall …

Java集合:關于 HashSet 的內容盤點

哈希表存放的是哈希值&#xff0c; HashSet 存儲元素的順序并不是按照存入時的順序&#xff08;和 List 顯然不同&#xff09; 而是按照哈希值來存的所以取數據也是按照哈希值取得。 &#xff5e; 本篇內容包括&#xff1a;HashSet 概述、HashSet 與 HashMap 的關系以及HashSet…

mysql備份腳本

#!/bin/bash #保留備份個數&#xff0c;會刪除時間較早的.dump備份 number3 #設置備份保存路徑&#xff0c;yourpath替換成自己的備份保存路徑 backup_diryourpath #日期格式 dddate %Y%m%d #備份工具 toolmysqldump #數據庫用戶名 usernameroot #數據庫密碼&#xff0c;由于密…

Java集合:關于 TreeSet 的內容盤點

TreeSet() 是使用二叉樹的原理對新 add() 的對象按照指定的順序排序&#xff08;升序、降序&#xff09;&#xff0c;每增加一個對象都會進行排序&#xff0c;將對象插入的二叉樹指定的位置&#xff1b; ~ 本篇內容包括&#xff1a;TreeSet 概述、TreeSet 的使用以及其他知識點…

python求素數

口求100內的素數 -個數能被從2開始到自己的平發根的正整數整數整除,就是合數 import math n100 for X in range(2, n): for i in range(2, math.ceil(math.sqrt(x))): if x %i 0: break else: print(x)口求100內的素數 合數一定可以分解為幾個質數的乘積 import math n100 pri…

svn鉤子腳本

REP0S"$1" REV"$2"export LANGen_US.UTF-8 LOGPATH"/app/log" [ !-d ${LOGPATH}] && mkdir $[LOGPATH) -p #update content from svn↓14 SVN/usr/bin/svn↓ SVN update --username test --password test /data/ if[ $? -eq ] then /us…

shell判斷字符串是否為數字

#1.組合語法判斷1: [ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g"] &&\echo”兩個參數都必須為數字”&& exit 1#2.組合語法判斷2:[ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g&…

MySQL:DQL 數據查詢語句盤點

本篇內容包括&#xff1a;DQL 的簡介、SELECT 語句、WHERE 條件語句、JOIN 連接查詢(多表查詢)和分組、過濾、排序、分頁、子查詢的使用。 一、DQL 簡介 DQL&#xff08;Data QueryLanguage&#xff09;語句&#xff0c;即數據查詢語句 常用的語句關鍵字有&#xff1a;SELECT…

MySQL:DML 數據操作語句盤點

本篇內容包括&#xff1a;DML 的簡介、INSERT 命令、UPDATE 命令、DELETE 命令以及 TRUNCATE 命令的使用。 一、DML 簡介 DML&#xff08;Data Manipulation Language&#xff09;語句&#xff0c;即數據操作語句&#xff0c;用于操作數據庫對象中所包含的數據。 常用關鍵字包…

MySQL:DDL 數據定義語句盤點

本篇內容包括&#xff1a;DDL 的簡介、SHOW 查看語句、CREATE 創建語句、ALTER 修改語句以及 DROP 刪除語句的使用。 一、DDL 簡介 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;即數據定義語句&#xff0c;功能就是定義數據庫DATabase、表table、索引ind…

MySQL:DCL 數據控制語句盤點

本篇內容包括:DCL 簡介、GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT、LOCK命令的使用。 一、DCL 簡介 DCL&#xff08;Data Control Language&#xff09;語句&#xff0c;即數據控制語句&#xff0c;用于設置或更改數據庫用戶或角色權限的語句 常用關鍵字包括&#xff1a;…

oracle遷移父子數據

現有需求如下&#xff0c;業務組織單元表中id字段數據在另外一個系統全部重復&#xff0c;但需要將此業務單元組織導入另一系統 業務組織單元表Isc_Specialorg_Unit 表中存在ID字段為子節點數據&#xff0c;parent_id為父節點數據&#xff0c;orgpath為組織路徑 現在做如下操…

批量更新數據庫數據

"update isc22.isc_user t set t.saphrid "&E1&"where t.id "&B1&";"

oracle控制文件

控制文件是數據庫里面非常重要的一類文件,它記錄了當前實例連接的數據庫的結構和行為&#xff0c;并維護數據庫的一致性。 初始化參數文件中描述其位置&#xff0c;很小的:二進制文件,一般不要超過100mmount讀open一直在用 控制文件只能連接一個database丟失要恢復 …

oracle表空間

概念 表空間和數據文件 ●表空間是邏輯存儲概念&#xff0c;一個表空間是一個或多個數據文件的邏輯集合 ●存儲對象(表、索引)邏輯的存儲在表空間上&#xff0c;而存儲對象的數據物理的存放在數據文件上 ●數據庫至少需要一個叫做system的表空間&#xff0c;也就是系統表空間 ●…

oracle日志

日志分類 redo log files聯機日志或重做日志 archived log files歸檔日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用戶信息日志如跟蹤會話日志 background dump_ dest進程日志還有其他一-些不常用的日志 v$database的log_mode 數據庫歸檔模式…

MySQL:分庫分表知識點盤點

本篇內容包括&#xff1a;數據庫瓶頸、分庫分表以及分庫分表相關問題 一、數據庫瓶頸 不管是IO瓶頸&#xff0c;還是CPU瓶頸&#xff0c;最終都會導致數據庫的活躍連接數增加&#xff0c;進而逼近甚至達到數據庫可承載活躍連接數的閾值。在業務Service來看就是&#xff0c;可用…

oracle的sga

sga SGA的管理 ■有三種方式&#xff1a; ●8i:SGA的總大小由所有內存組件大小之和決定&#xff0c;不能直接定義SCA大小。對內部組件大小的修改必須在數據庫重起 后 才能生為&#xff0c;所以叫做SGA的靜態管理。 ●9i&#xff…

MySQL:日志知識點盤點

本篇內容包括&#xff1a;binlog&#xff08;二進制日志&#xff09;、redo log 以及 undo log 一、binlog&#xff08;二進制日志&#xff09; binlog 用于記錄數據庫執行的寫入性操作(不包括查詢)信息&#xff0c;以二進制的形式保存在磁盤中。binlog是mysql的邏輯日志&…

ROWNUM的使用

一個偽列看起來像是一個表中的列&#xff0c;但實際上并不保存在表中。你可以查詢&#xff0c; 但是不能插入&#xff0c;修改和刪除其中的值。一個偽列也類似于一個沒有參數的函 數。但是在典型情況下&#xff0c;在結果集中可以為每一行返回相同的值&#xff0c;而偽列通 常為…