常用集合(List,Set,Map)的基本定義和操作

集合類存放于java.util包中。

集合類存放的都是對象的引用,而非對象本身,出于表達上的便利,我們稱集合中的對象就是指集合中對象的引用(reference)。

常用的集合類型主要有3種:set(集)、list(列表)和map(映射)。

通俗的說,集合就是一個放數據的容器,準確的說是放數據對象引用的容器。

Collection 集合的根接口

------| List? 如果是實現了List接口的集合類,具備的特點: 有序,可重復。

---------| ArrayList? ArrayList 底層是維護了一個Object數組實現的。 特點: 查詢速度快,增刪慢。

---------| LinkedList ?LinkedList 底層是使用了鏈表數據結構實現的, 特點: 查詢速度慢,增刪快。

---------| Vector(了解即可)? 底層也是維護了一個Object的數組實現的,實現與ArrayList是一樣的,但是Vector是線程安全的,操作效率低。

------| Set? 如果是實現了Set接口的集合類,具備的特點: 無序,不可重復。

----------| HashSet? 底層是使用了哈希表來支持的,特點: 存取速度快.

----------| TreeSet?? 如果元素具備自然順序 的特性,那么就按照元素自然順序的特性進行排序存儲。

------|Queue 隊列接口集合類,是一種先進先出的數據結構,更新時使用術語“入隊”“出隊”用LinkedList實現接口

Map映射集合的根接口

------|HashMap 通過使用映射關系來到達存儲數據,通過hashcode快速查找,具體特點:無序,速度快

------|TreeMap 映像樹 ,基于紅黑樹實現,沒有調優選項,處于平衡狀態,具體特點:有序,速度慢

用法:

ArrayList:

定義:List<E> list=new ArrayList<E>();//構造一個空數組,默認容量為10

????????????? ArrayList<E> list=new ArrayList<E>();//這兩種定義方式一個是以List接口聲明,( List為接口,ArrayList是List接口的實現類)另一個是以實現類ArrayList聲明,兩者相差不大,實現函數方法基本一樣。(注:用List聲明的數組中,像TrimToSize()沒有,而用ArrayList聲明里面可以使用,該方法用來刪除預留元素的空間,這預留元素的空間并不是null而是每次ArrayList增長都會申請多一點空間,當size()=1000,ArrayList已經申請了1200空間,而該方法是刪除多余的200空間,該方法用來內存緊張的時候使用),

?????? (尖括號里面的E是數據類型,比如:如果是String,則該數組里面只能存String類型的數據)

個人認為能用ArrayList聲明盡量用ArrayList聲明;

常用方法:

add(E e):???????????????????? 在數組末尾添加元素

size():?????????????????????????? 數組中實際元素個數,并不是數組容量

add(int index, E e):??? 在數組指定位置添加元素

clear():???????????????????????? 將數組中元素清空

contains(E e):???????????? 判斷數組中是否含有某個元素

get(int index):???????????? 返回數組指定位置的元素

indexOf(E e):????? 返回數組指定元素第一次出現的位置

set(int index, E e):???? 替換數組指定位置的值

remove(int index):???? 移除數組指定位置的元素并返回刪除的值

remove(E e):? 移除數組中第一次出現的指定元素并返回true和false

addAll(Collection<? extends E> c):? 在數組末尾添加另一個數組

addAll(int index, collection<? extends E> c):?? 在數組指定位置添加另一個數組

removeAll(Collection<?>c):?? 將數組中屬于數組 c 中的元素全部刪除

LinkedList:

定義:LinkedList<E> linkedlist=new LinkedList<E>();

LinkedList其實數據結構里面的雙向鏈表,既然是鏈表,那么分配的存儲空間并不是連續的,而是分散的,插入和刪除操作很快,時間復雜度為O(1);但訪問該數組時就比較慢了,必須從第一個元素開始找起,時間復雜度為O(n);

它包含了一個重要的內部類Node,Node是雙向鏈表節點所對應的數據結構它包含的屬性有,當前節點所包含的值,上一個節點及下一個節點。

LinkedList既可以作為先進先出的隊列又可以作為后進先出的堆棧,并且提供了了豐富的方法

常用方法:

添加:

boolean add(E e):在鏈表后添加一個元素,如果成功,返回true,否則返回false;

addFirst(E e):在鏈表頭部插入一個元素;

addLast(E e):在鏈表尾部添加一個元素;

add(int index, E element):在指定位置插入一個元素。

offer(E e);類似隊列的插入方法

offerFirst(E e);在頭部插入一個元素

offerLast(E e);在尾部插入一個元素

刪除:

remove();移除鏈表中第一個元素;

boolean remove(Object o):移除鏈表中指定的元素;

remove(int index):移除鏈表中指定位置的元素;

removeFirst():移除鏈表中第一個元素,與remove類似;

removeLast():移除鏈表中最后一個元素;

boolean removeFirstOccurrence(Object o):移除鏈表中第一次出現所在位置的元素;

boolean removeLastOccurrence(Object o):移除鏈表中最后一次出現所在位置的元素;

獲取元素:

get(int index):按照下邊獲取元素;

getFirst():獲取第一個元素;

getLast():獲取第二個元素;

以上為隊列的先進先出的方法

下面的方法是堆棧的類似方法:

push(E e):與addFirst一樣,實際上它就是addFirst;

pop():與removeFirst一樣,實際上它就是removeFirst;

poll():查詢并移除第一個元素;

peek():獲取第一個元素,但是不移除;

peekFirst():獲取第一個元素,但是不移除;

peekLast():獲取最后一個元素,但是不移除;

比較特殊的方法:

getFirst();

getLast();

獲取元素,但不刪除元素。如果集合中沒有元素,會出現NoSuchElementException

removeFirst();

removeLast();

獲取元素,但是元素被刪除。如果集合中沒有元素,會出現NoSuchElementException

在JDK1.6出現了替代方法。

offerFirst();

offerLast();

peekFirst();

peekLast();

獲取元素,但不刪除元素。如果集合中沒有元素,會返回null。

pollFirst();

pollLast();

獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null。

遍歷的方法:

(01) 第一種,通過迭代器遍歷。即通過Iterator去遍歷。

for(Iterator iter = list.iterator(); iter.hasNext();)

??? iter.next();

(02) 通過快速隨機訪問遍歷LinkedList

int size = list.size();

for (int i=0; i<size; i++) {

??? list.get(i);???????

}

(03) 通過另外一種for循環來遍歷LinkedList

for (Integer integ:list)? ;

(04) 通過pollFirst()來遍歷LinkedList

while(list.pollFirst() != null) ;

(05) 通過pollLast()來遍歷LinkedList

while(list.pollLast() != null) ;

(06) 通過removeFirst()來遍歷LinkedList

try {

??? while(list.removeFirst() != null) ;

} catch (NoSuchElementException e) {

}

(07) 通過removeLast()來遍歷LinkedList

try {

??? while(list.removeLast() != null)? ;

} catch (NoSuchElementException e) {

}

(注:千萬不要通過隨機訪問去遍歷LinkedList,如果該數組很長所花費的時間也就會很長)

Vector:又稱之為向量類,與ArrayList差不多,只不過Vector是線程安全,它里面的方法基本都是用synchronized修飾。

HashSet:

定義:HashSet<E> hashset=new HashSet<E>();

????????????? 或者Set<E> hashset=new HashSet<E>();

上面提到Set是無序,所以HashSet里面沒有重復的數據,可以允許為null值,它是Set接口的一個實現類

如何添加同一個數據,HashSet會調用hashCode()用來判斷是否相同,執行完HashCode后也會執行equals,如果兩者都返回true,那么它就會認為這兩者數據是一樣的,就會停止添加,否則直接添加

如何重寫了equals函數那么HashCode也必須重寫,否則會出錯

常用方法:

add(E e)???? 如果此 set 中尚未包含指定元素,則添加指定元素。

clear()???? 從此 set 中移除所有元素。

clone()?????? 返回此 HashSet 實例的淺表副本:并沒有復制這些元素本身。contains(Object o)???? 如果此 set 包含指定元素,則返回 true。

isEmpty()??? 如果此 set 不包含任何元素,則返回 true。

iterator()??? 返回對此 set 中元素進行迭代的迭代器。

remove(Object o)?? 如果指定元素存在于此 set 中,則將其移除。

size()?????? 返回此 set 中的元素的數量(set 的容量)。

TreeSet:

它是紅黑樹數據結構,他是是基于TreeMap實現

TreeSet是非同步的

TreeSet中的元素支持2種排序方式:自然排序 或者 根據創建TreeSet 時提供的 Comparator 進行排序。這取決于使用的構造方法。

HashMap:

通過鍵值對key-value的形式存值,有點類似于哈希表的鏈式存儲方式,

允許用null作為key和value

這個實現的基本操作提供了穩定的性能(get和put)

Get(Object key)???? //獲取key對應的value值

Put(key,value)????? //存值

HashMap不能直接遍歷,必須通過KeySet()方法返回一個key的Set集合然后在通過遍歷set來獲取value的值

remove(Object?key)??? //如果存在的話,從這個映射中移除指定的鍵的映射。

Size()????? //返回鍵值對的數目

?

?

以上為個人總結

?

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

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

相關文章

多麥克風做拾音的波束_麥克風丨人聲應該用動圈話筒還是電容話筒?

無論是在您最喜歡的樂隊的紀錄片中&#xff0c;還是在電影中那些有關錄音棚里的場景中&#xff0c;似乎都存在著一個共同的主題&#xff0c;那就是&#xff1a;歌手們都在使用大振膜的電容麥克風進行錄音。我知道人們應該從別人的經驗中汲取精華&#xff0c;事半功倍。但是我并…

MYSQL安裝與庫的基本操作

mysql數據庫 什么是數據庫 # 用來存儲數據的倉庫 # 數據庫可以在硬盤及內存中存儲數據 數據庫與文件存儲數據區別 數據庫本質也是通過文件來存儲數據, 數據庫的概念就是系統的管理存儲數據的文件 數據庫介紹 數據庫服務器端: 存放數據的主機集群數據庫端: 可以連接數據庫的任意…

java框架mybatis配置文件總結一

先新建個java EE的項目 該配置文件必須在src的目錄下面&#xff0c; 新建一個xml 文件&#xff1a; 建完后發現它會自動建在web目錄下面&#xff0c;我們把這個文件移到src目錄下面&#xff1a; &#xff08;注&#xff1a;對了&#xff0c;該文件的編碼最好用utf-8的no bom,…

python第六周實驗_第六周實驗四

二.實驗的內容(1)根據下面的要求實現圓類Circle。1.圓類Circle的成員變量&#xff1a;radius表示圓的半徑。2.圓類Circle的方法成員&#xff1a;Circle():構造方法&#xff0c;將半徑置0Circle(double r)&#xff1a;構造方法&#xff0c;創建Circle對象時將半徑初始化為rdoubl…

測試:脫離VS2010使用自動化測試時出現 6DA215C2-D80D-42F2-A514-B44A16DCBAAA 錯誤

在前一系列IronRuby中一直是圍繞這UI自動化測試來寫的&#xff0c;今天基本測試框架完成了&#xff0c;測試人員沒有安裝VS2010&#xff0c;不知道能否跑&#xff0c;所以就在測試人員機器上跑跑看&#xff0c;但是問題就出現了 現象 運行run.bat跑單元測試時&#xff0c;出現以…

Linux的遠程連接及Linux系統下Tomcat部署

Linux的遠程需要用的軟件有Xshell&#xff0c;Xftp 本人使用VMware12Pro虛擬機&#xff0c;Linux系統為CentOS7&#xff0c;使用局域網進行遠程連接 Xshell和Xftp沒有安裝的話可以取官網下載&#xff0c;但Xshell需要驗證信息&#xff0c;所以也可以去360電腦軟件下載 在VMw…

uniapp圖標_uniapp擴展自定義uniIcon組件圖標

1、訪問Iconfont-阿里巴巴矢量圖標庫&#xff0c;下載自己想要的圖片&#xff0c;下載svg格式備用2、通過百度字體編輯器打開本地最新的uni.ttf文件(http://fontstore.baidu.com/static/editor/index.html#)&#xff0c;打開之后可以看到所有的uni所有圖標都在里面3、導入第一步…

asp.net面試集合

1 &#xff1a;維護數據庫的完整性、一致性、你喜歡用觸發器還是自寫業務邏輯&#xff1f;為什么 答&#xff1a;盡可能用約束&#xff08;包括CHECK、主鍵、唯一鍵、外鍵、非空字段&#xff09;實現&#xff0c;這種方式的效率最好&#xff1b;其次用觸發器&#xff0c;這種方…

Spring Boot 日志的使用及logback.xml的使用

當前是市場上使用的日志框架有很多&#xff0c;比如&#xff1a;JUL、JCL、Jboss-logging、logback、log4j、slf4j....等等&#xff1b; 但是日志主要分為兩類&#xff0c;日志門面和日志實現兩類&#xff1b;日志門面可以說是日志框架的抽象層&#xff0c;主要實現是的日志實…

基4fft算法的蝶形圖_原地且自動整序的FFT算法

傳統的計算快速傅里葉變換的Cooley-Tukey算法效率極高&#xff0c;因其主要由蝶形運算構成&#xff0c;所以代碼形式也非常簡單&#xff0c;只是需要將輸入或者輸出按照位反轉的方式重新排序。這個重新排序的步驟并不是必須的。Clive Temperton于1991年在Self-Sorting In-Place…

嵌入式BootLoader技術內幕(二)

三、Boot Loader 的主要任務與典型結構框架 在繼續本節的討論之前&#xff0c;首先我們做一個假定&#xff0c;那就是&#xff1a;假定內核映像與根文件系統映像都被加載到 RAM 中運行。之所以提出這樣一個假設前提是因為&#xff0c;在嵌入式系統中內核映像與根文件系統映像也…

MongoDB數據庫的遷移

最近公司開始要換服務器啦&#xff0c;MongoDB上面的數據又得遷移&#xff0c;還是記錄一下比較好。 1&#xff09;、將MongoDB的壓縮包解壓至相對應的路徑(壓縮文件在本地服務器的地址192.168.0.22的/opt/zip文件下面) 2&#xff09;、配置好mongodb.conf文件&#xff0c;配…

excel vba 如何將日期周幾轉換成文字_這5個超實用的Excel技巧,讓你的辦公效率更高...

導讀&#xff1a;對于辦公職員來說&#xff0c;Excel是幾乎每天都會接觸的辦公軟件。在Excel中&#xff0c;有非常多的小技巧&#xff0c;學習這些小技巧需要不斷的積累和應用&#xff0c;今天指北針就來給大家分享5個超實用的Excel技巧&#xff0c;讓辦公變得更加有效率。文/芒…

VMware創建Linux及局域網內獨立訪問IP和訪問外網IP的配置

好早之前有一篇是配置遠程連接Linux和部署Tomcat的文章&#xff0c;但是并沒有講解如何配置IP的相關知識。最近公司在搞集群配置&#xff0c;我就先拿電腦上的VMware上的Linux做個測試&#xff0c;分享和總結一下經驗吧&#xff0c;也算是為了補齊之前的那個空白&#xff01; …

每位設計師都應該擁有的50個CSS代碼片段

每位設計師都應該擁有的50個CSS代碼片段

C#淺拷貝與深拷貝區別

也許會有人這樣解釋C# 中淺拷貝與深拷貝區別&#xff1a; 淺拷貝是對引用類型拷貝地址&#xff0c;對值類型直接進行拷貝。 不能說它完全錯誤&#xff0c;但至少還不夠嚴謹。比如&#xff1a;string 類型咋說&#xff1f; 其實&#xff0c;我們可以通過實踐來尋找答案。 首先&a…

內網安裝nginx+keepalived環境配置及簡單使用

分享一下這次艱難的配置過程&#xff0c;銜接上一篇的配置內網獨立IP虛擬機。 先吐槽一波&#xff0c;由于公司網絡屬于內網&#xff0c;與外網互不相通&#xff0c;所以在安裝nginx的時候可能會去外網找相對應rpm文件&#xff0c;而且也有許多的版本不兼容問題&#xff0c;好…

cad連續標注數字123怎么弄_實例講解CAD模型與布局中的各種比例

好課推薦&#xff1a;零基礎CAD&#xff1a;點我CAD室內&#xff1a;點我 周站長CAD&#xff1a;點我CAD機械&#xff1a;點我 Bim教程&#xff1a;點我CAD建筑&#xff1a;點我CAD三維&#xff1a;點我全屋定制&#xff1a;點我 ps教程&#xff1a;點我蘋果版CAD:點我 3dmax教…

SpringMvc異步請求的使用及部分原理

最近隔壁項目組的項目又出問題了&#xff0c;一直被用戶投訴太卡了&#xff0c;頁面白屏的那種&#xff0c;打開源代碼一看&#xff0c;全是非異步請求&#xff0c;類似于以下寫法&#xff1a; ResponseBodyRequestMapping(value "/getTest")public String getTest(…

Microsoft BizTalk ESB Toolkit 2.0

[>>> 更多<BizTalk開發系列>文章 ] 微軟于6月8號發布了BizTalk Server 2009企業集成平臺的最后一個功能組件:ESB Toolkit 2.0 (原名:ESB Guidance 2.0)&#xff0c;ESB ToolKit 2.0一個是工具和代碼集擴展了BizTalk Server 2009對于松耦合和動態消息架構的支持…