java——順序表

前言:順序表是線性表的一種,它是較于數組更加靈活的一種儲存方式。線性表通常是邏輯上是連續的一條直線,但在物理上不是連續的。java中已經實現好了一個順序表,搭配泛型可以支持各種類型的使用,下面就來介紹該如何使用。

ArrayList簡介

在集合框架中,ArrayList是一個普通的類,實現了List接口。

ArrayList是以泛型方式實現的,使用必須先實例化。底層邏輯是一段連續的空間,可以支持動態擴容,是一個動態類型順序表。

和Vector不同,ArrayList不是線程安全,在單線程可以使用,多線程得選擇Vector或CopyOnWriteArrayList。

ArrayList內部實現

ArrayList內部:

可以看到,list內部有幾個重要的成員變量:

ArrayList擴容機制

在使用add來進行擴容時,我們可以看到是由上述圖來實現1.5倍的擴容,在插入元素的時候會自動檢測擴容。

ArrayList的構造方法

ArrayList(int initialCapacity)

指定順序表初始容量

給定一個形參,他會初始化一個指定初始化容量大小的類型數組,用來存放數據。

看看內部實現:

這個非常好理解,可以看見,要是給定的大小合法,則會直接創立一個新對象數組來賦給ArrayList的成員變量elementData(ArrayList操作的時候都是使用該數組)若是給定大小為零,則直接傳一個ArrayList的成員變量的空數組。若是給定大小小于零,則直接報錯。

ArrayList(Collection <? extends E>c)

利用其他Collection來構建ArrayList

我們可以看到,使用這個構造方法可以直接初始化構建一個順序表。

內部實現:

這里的“?”代表通配符,整體意思就是:
1.<>里面只要實現了Collection接口都是可以傳參的,如:

上述的圖片中可以看到List實現了Collection接口,所有實現了Collection接口的都可以傳入

2.這里的E代表著通配符的上界,意味著要么是E要么是c(E的子類)

經上述的細節之后,才能真正初始化構建一個帶有順序表的順序表。

ArrayList()

無參構造

直接創立的無參順序表

可以看見,內部只有簡簡單單的一個賦值,賦的是空的數組。

但是,我們可以使用add方法來初始化一下順序表。使用add方法時(如上述ArrayList擴容機制講到),采用的是擴容的方法來幫助這個空表初始化,通常默認為10,也就實現了該順序表為空的狀態。

ArrayList常見操作

如圖:

這里只演示比較容易出錯的的方法:

1.remove(int ···) 和 remove(Object ···)

第一個通俗易懂,就是刪除下標,但是第二個就容易和第一個混淆。比如在Integer類型順序表中,系統會無法分辨傳入的是下標還是元素:

所以第二個remove通常是這樣寫:

2.subList(int···,int···)

這個是截取部分內容(前閉后開區間),但注意的是,截取后并不會建立新的對象,只是拿到了截取到部分的地址而已:

ArrayList遍歷方法

有三種方法可以遍歷:

for - i:

for - each:

迭代器(iterator ,listIterator):

倆個迭代器的區別在于一個需要傳入元素個數參數,一個不用。一個可以實現從后往前迭代,一個不能。

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

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

相關文章

以太網:ARP和信息處理狀態機+代碼實現

ARP過程只需要一次發送和一次接受就可以完成了&#xff1b; 在實際實現協議棧的時候我個人認為要以主動ARP開始&#xff1b; 主動ARP&#xff1a;發送一次ARP請求&#xff0c;接受一個ARP報文&#xff1b; 使用這種方式的原因是上位機可能不知道你的IP地址&#xff08;當然如…

Mysql疑難報錯排查 - Field ‘XXX‘ doesn‘t have a default value

項目場景&#xff1a; 數據庫環境 &#xff1a;mysql8; 工程使用&#xff1a;MyBatisPlus 表情況&#xff1a; 問題描述 某一個插入語句使用了 MyBatisPlus 的 save 方法&#xff0c;因為end_time1 end_time2都并沒有值&#xff0c;所以在MyBatisPlus默認情況下&#xff0c;…

如何使自己寫的代碼易讀易懂?

〓● 如果代碼可讀性不佳、不容易理解&#xff0c;可能造成如下問題&#xff1a; 〓? 其他工程師浪費時間解讀它&#xff1b; 〓? 誤解導致引入缺陷&#xff1b; 〓? 其他工程師修改時破壞代碼。 〓● 提高代碼可讀性&#xff0c;有時候可能使其變得更為冗長、占用更多的…

【Python】深入認識Python數據類型和變量

???? 文章目錄 1. 引言數據類型的重要性Python中的數據類型概述 2. 數字類型整型&#xff08;int&#xff09;浮點型&#xff08;float&#xff09;復數&#xff08;complex&#xff09; 3. 字符串類型字符串的定義與使用字符串操作方法 4. 布爾類型布爾值和布爾運算 5. 列…

docker網絡詳解

1. 網絡模式 1.1 網絡結構 當安裝Docker以后&#xff0c;會自動創建三個網絡。可以使用docker network ls命令列出這些網絡。 $ docker network ls NETWORK ID NAME DRIVER SCOPE 440aefe8afa3 bridge bridge local aa8d6325580f host host …

02JAVA字符串和集合

1.字符串 1.String 介紹: String在java.lang包下,使用不需要導包,String代表字符串,帶""字符串都是String類的對象 字符串的特點: 字符串不可變,他們的值在創建后不能被改變 字符串效果相當于(char[]),底層原理是字節數組(byte[]) String構造方法: String 變量名 ne…

chat-glm4,qwen1.5性能對比

modelMMLUC-EvalGSM8KHumanEvalglm-4-9b74.777.184.070.1qwen1.5-7b6174.162.536.0qwen1.5-14b67.678.770.137.8 數據來源是以下兩個圖。可以看到GLM4非常優秀&#xff0c;qwen應該也快要開源自己的新模型了&#xff0c;希望國內的大模型團隊能夠繼續堅持&#xff0c;持續努力&…

AI框架之Spring AI與Spring Cloud Alibaba AI使用講解

文章目錄 1 AI框架1.1 Spring AI 簡介1.2 Spring AI 使用1.2.1 pom.xml1.2.2 可實現的功能 1.3 Spring Cloud Alibaba AI1.4 Spring Cloud Alibaba AI 實踐操作1.4.1 pom.xml1.4.2 配置文件1.4.3 對接文本模型1.4.4 文生圖模型1.4.5 語音合成模型 1 AI框架 1.1 Spring AI 簡介…

NSSCTF-Web題目5

目錄 [SWPUCTF 2021 新生賽]error 1、題目 2、知識點 3、思路 [LitCTF 2023]作業管理系統 1、題目 2、知識點 3、思路 [HUBUCTF 2022 新生賽]checkin 1、題目 2、知識點 3、思路 [SWPUCTF 2021 新生賽]error 1、題目 2、知識點 數據庫注入、報錯注入 3、思路 首先…

淺談InoDB中的行級鎖

行級鎖的類型&#xff1a; Record Lock&#xff0c;記錄鎖&#xff0c;僅僅把?條記錄鎖上&#xff0c;記錄鎖分為排他鎖和共享鎖。Gap Lock&#xff0c;間隙鎖&#xff0c;鎖定?個范圍&#xff0c;但是不包含記錄本身&#xff0c;只存在于可重復讀隔離級別&#xff0c;?的是…

Oracle 重置system用戶的密碼

荊軻刺秦王 如果您忘記了Oracle數據庫的密碼&#xff0c;可以通過以下步驟來重置密碼&#xff1a; Oracle 版本&#xff1a;linux 11g Release 11.2.0.4.0-64bit Froduction 1. 以SYSDBA權限登錄到數據庫。 conn / as sysdba 2. 停止數據庫實例。 shutdown immediate; 3…

vue 文件預覽mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml

vue 文件預覽 圖片、mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml 最近公司要做一個類似電腦文件夾的功能&#xff0c;支持文件夾操作&#xff0c;文件操作,這里就不說文件夾操作了&#xff0c;說說文件預覽操作&#xff0c;本人是后端java開發&#xff0c;前端vue&#…

Nginx通過轉發代理解決跨域問題

前后端分離開發WEB端&#xff08;瀏覽器&#xff09;&#xff0c;不可避免的就是要解決跨域問題&#xff0c;因為這是瀏覽器的一種安全機制&#xff0c;當請求的&#xff08;1&#xff09;域名、&#xff08;2&#xff09;端口、&#xff08;3&#xff09;協議 。其中的一項與源…

MySQL如何多表關聯更新

在 MySQL 中,多表關聯更新可以使用 UPDATE 語句與 JOIN 子句結合來實現。以下是一個多表關聯更新的基本示例: 基本語法 UPDATE table1 JOIN table2 ON table1.column = table2.column SET table1.column = new_value, table2.column = new_value WHERE condition;

Linux系統安裝APITable詳細流程與遠程訪問本地平臺數據分析

文章目錄 前言1. 部署APITable2. cpolar的安裝和注冊3. 配置APITable公網訪問地址4. 固定APITable公網地址 &#x1f4a1;推薦 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。【點擊跳轉到網站】 前言 v…

AMD顯卡和英偉達顯卡哪個好?

顯卡是計算機中負責處理圖形和視頻輸出的硬件設備&#xff0c;主要分為兩種類型&#xff1a;AMD的A卡和NVIDIA的N卡。那么AMD顯卡和英偉達顯卡哪個好&#xff1f;怎么選&#xff1f; 答&#xff1a;不能一概而論地說哪個好&#xff0c;因為它們各有優勢&#xff0c;選擇應基于…

listbox有scrollviewer,點擊后不會觸發selectionchanged事件

這個問題是因為在ListBox中的ScrollViewer處于焦點狀態時&#xff0c;SelectionChanged事件沒有觸發。這通常是因為ScrollViewer在處理鼠標事件時會優先于ListBox。 為了解決這個問題&#xff0c;可以通過以下方法來確保SelectionChanged事件在ListBox中被觸發&#xff1a; 在…

RE_RC4加密

之前做的幾道題目&#xff0c;rc4也是經常遇到&#xff0c;今來系統學學&#xff0c;記錄一下 對稱加密&#xff0c;即加密和解密的密鑰可以相互推導&#xff0c;也有的是相同的。 RC4 是以字節流處理每一個字節&#xff0c;而不是 DES 的分組操作。 包含三個參數&#xff1…

探索通信技術的未來:2024中國通信技術和智能裝備產業博覽會

探索通信技術的未來&#xff1a;2024通信技術產業專場 隨著信息技術的飛速發展&#xff0c;通信技術已成為現代社會不可或缺的基礎設施。2024年10月11日至13日&#xff0c;青島將迎來一場通信技術的盛會——2024中國軍民兩用智能裝備與通信技術產業博覽會。本次博覽會不僅將展…

面試(03)————多線程

目錄 一、線程和進程的區別&#xff1f; 二、并行和并發的區別&#xff1f; 三、線程創建的方式有哪些&#xff1f; 3.1、繼承Thread類 3.2、實現Runnable接口 3.3、實現Callable接口 3.4、線程池 四、Runnable和Callable的區別&#xff1f; 五、在啟動線程的時候&am…