JAVA提高第九篇 集合體系
在經(jīng)過了前面的JDK6.0新特性的學(xué)習(xí)后,將進(jìn)一步深入學(xué)習(xí)JDK,因?yàn)榧系闹匾裕虼藦募祥_始入手分析:
一、集合概況
Java是一種面向?qū)ο笳Z言,如果我們要針對(duì)多個(gè)對(duì)象進(jìn)行操作,那么首先必要將多個(gè)對(duì)象進(jìn)行保存起來之后,然后才能操作,那么我們肯定會(huì)想到用數(shù)組來進(jìn)行存放,但數(shù)組長(zhǎng)度固定,不能滿足變化的要求。所以,JAVA提供了集合。
數(shù)組與集合的區(qū)別:
數(shù)組:長(zhǎng)度固定、可以存放基本類型/引用類型、數(shù)組中元素的類型必須一致
集合:長(zhǎng)度可變自動(dòng)擴(kuò)容、只能存放引用類型、集合中元素類型可以不一致但一般保持一致
二、集合體系
集合作為一個(gè)容器,可以存儲(chǔ)多個(gè)元素,但是由于數(shù)據(jù)結(jié)構(gòu)的不同,java提供了多種集合類。將集合類中共性的功能,不斷向上抽取,最終形成了集合體系結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)存儲(chǔ)的方式
Java中集合類的關(guān)系圖:
三、Collection【單值接口】
Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素(Elements)。因?yàn)橐恍〤ollection允許存放相同的元素而另一些不行。一些能有序而另一些不行,于是衍生出兩個(gè)子類接口List和Set。
Collection接口中常用方法:
A:添加功能
boolean add(Object obj):向集合中添加一個(gè)元素
boolean addAll(Collection c):向集合中添加一個(gè)集合的元素。
B:刪除功能
void clear():刪除集合中的所有元素。
boolean remove(Object obj):從集合中刪除指定的元素
boolean removeAll(Collection c):從集合中刪除一個(gè)指定的集合元素。
C:判斷功能
boolean isEmpty():判斷集合是否為空。
boolean contains(Object obj):判斷集合中是否存在指定的元素。
boolean containsAll(Collection c):判斷集合中是否存在指定的一個(gè)集合中的元素。
D:遍歷功能
Iterator iterator():就是用來獲取集合中每一個(gè)元素。
E:長(zhǎng)度功能
int size():獲取集合中的元素個(gè)數(shù)
F:交集功能
boolean retainAll(Collection c):判斷兩個(gè)集合中是否有相同的元素。
G:把集合轉(zhuǎn)換成數(shù)組
Object[] toArray():把集合變成數(shù)組。
List接口中常用方法:
首先我們知道List接口是Collection接口的子類,所以也具備上面的方法,但除了上面的方法外,List接口中典型的ArrayList底層是采用的數(shù)組結(jié)構(gòu),因此還具體被一些索引操作的方法,如下:
List的特有功能
A:添加功能
void add(int index, Object obj):在指定位置添加元素
B:刪除功能
Object remove(int index):根據(jù)指定索引刪除元素,并把刪除的元素返回。
C:修改功能
Object set(int index, Object obj):把指定索引位置的元素修改為指定的值,返回修改前的值。
D:獲取功能
int indexOf(Object o):返回指定元素在集合中第一次出現(xiàn)的索引
Object get(int index):獲取指定位置的元素
ListIterator listIterator():列表迭代器
E:截取功能
List subList(int fromIndex, int toIndex):截取集合。
Set接口中常用方法:
Set接口下的元素?zé)o序,不可以重復(fù)。其下面分為HashSet和TreeSet。
HashSet
底層數(shù)據(jù)結(jié)構(gòu)是哈希表,線程不安全,效率高。
保證唯一性依賴兩個(gè)方法:hashCode()和equals()。
順序:
判斷hashCode()值是否相同。
相同:繼續(xù)走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
TreeSet
底層數(shù)據(jù)結(jié)構(gòu)是二叉樹,線程不安全,效率高。
保證元素唯一性的方法時(shí)根據(jù)返回值是否是0。
保證排序的兩種方式:
自然排序(元素具備比較性):實(shí)現(xiàn)Comparable接口
比較器排序(集合具備比較性):實(shí)現(xiàn)Comparator接口
四、迭代器(Iterator)
迭代器,從第一張JAVA集合類圖關(guān)系中可以看出,除了中間的Collection外,置于最頂上的左邊為迭代器Iterator.
1.使用步驟:
1、通過集合對(duì)象獲取迭代器對(duì)象。
2、通過迭代器對(duì)象判斷。
3、通過迭代器對(duì)象獲取。
2.迭代器原理
由于多種集合的數(shù)據(jù)結(jié)構(gòu)不同,所以存儲(chǔ)方式不同,所以,取出方式也不同。那么這個(gè)時(shí)候,把判斷和獲取功能定義在了一個(gè)接口中,將來,遍歷哪種集合的時(shí)候,只要該集合內(nèi)部實(shí)現(xiàn)這個(gè)接口即可。【迭代器模式】
3.Collection存儲(chǔ)字符串和自定義對(duì)象并通過迭代器遍歷
Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add("java"); Iterator it = c.iterator(); while(it.hasNext()) { String s = (String)it.next(); System.out.println(s); }
4.ListIterator迭代器是Iterator的子接口
所以List的遍歷方式共有三種1、Iterator迭代器2、ListIterator迭代器3、普通for+get()
五、Map<鍵值對(duì)接口>
map是一個(gè)鍵值對(duì)形式的集合。它的元素都是有鍵和值組成。Map的鍵(key)是唯一的,值(value)可以重復(fù)。
Map接口中常用方法:
A:添加功能
V put(K key ,V value) :當(dāng)key在集合中不存在是,添加元素;當(dāng)key存在時(shí)替換元素
B:判斷功能
boolean containsKey (Object key) :判斷指定的鍵是否在集合中存在
Boolean containsValue(Object value):判斷指定的值是否在集合中存在
Boolean isEmpty() :判斷集合是否為空
C:刪除功能
Void clear():清除所有鍵值對(duì)數(shù)據(jù)
D:獲取功能
Object get (Object key) :根據(jù)鍵獲取值
Set<K> keyset(): 所有鍵的集合
Collection<V>values() :所有值的集合
Set<Map.Entry<K,V>> entrySet() :返回此映射中包含的映射關(guān)系的 Set 視圖
E:長(zhǎng)度功能
Int size()
Map包括HashMap、HashTable和TreeMap。其中,HashTable已基本被HashMap取代, 新代碼中基本不在使用HashTable
(注:HashMap支持null , HashTable不支持null )
Map的遍歷方式:
1.鍵找值:
public static void main(String[] args) { Map<String,Integer> map = new HashMap<String,Integer>(); map.put("二陽",23); map.put("二崢",24); map.put("二光",25); Set<String> keys=map.keySet(); //把鍵其中起來,存入到set集合中. for(String key:keys){ //遍歷鍵集合,獲取每一個(gè)鍵。增強(qiáng)for Integer value=map.get(key); //讓鍵去找值 get(Object key) System.out.println(key+"***"+value); } }
2.鍵值對(duì)
public static void main(String[] args) { Map<String,Integer> map = new HashMap<String,Integer>(); map.put("二陽",23); map.put("二崢",24); map.put("二光",25); Set<String> keys=map.keySet(); //把鍵其中起來,存入到set集合中. for(String key:keys){ //遍歷鍵集合,獲取每一個(gè)鍵。增強(qiáng)for Integer value=map.get(key); //讓鍵去找值 get(Object key) System.out.println(key+"***"+value); } }
通過上面的學(xué)習(xí),讓我們對(duì)集合的類圖有了大體的認(rèn)識(shí),后面我們將會(huì)逐一深入我們最常用的比如:ArrayList HashMap等知識(shí)點(diǎn)的深入學(xué)習(xí)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java如何對(duì)map進(jìn)行排序詳解(map集合的使用)
- Java集合Set、List、Map的遍歷方法
- java集合框架 arrayblockingqueue應(yīng)用分析
- java集合map取key使用示例 java遍歷map
- java中List集合及其遍歷詳解
- java集合框架的體系結(jié)構(gòu)詳細(xì)說明
- Java實(shí)現(xiàn)Map集合二級(jí)聯(lián)動(dòng)示例
- java實(shí)現(xiàn)列表、集合與數(shù)組之間轉(zhuǎn)化的方法
- java ArrayList集合中的某個(gè)對(duì)象屬性進(jìn)行排序的實(shí)現(xiàn)代碼
- java中for循環(huán)刪除集合陷阱
相關(guān)文章
Spring?MVC?前端控制器?(DispatcherServlet)處理流程解析
DispatcherServlet是前置控制器,配置在web.xml文件中的,這篇文章主要介紹了Spring?MVC?前端控制器?(DispatcherServlet)處理流程,需要的朋友可以參考下2022-05-05java使用BeanUtils.copyProperties方法對(duì)象復(fù)制同名字段類型不同賦值為空問題解決方案
這篇文章主要給大家介紹了關(guān)于java使用BeanUtils.copyProperties方法對(duì)象復(fù)制同名字段類型不同賦值為空問題的解決方案,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11Java redisTemplate阻塞式處理消息隊(duì)列
用redis中的List可以實(shí)現(xiàn)隊(duì)列,這樣可以用來做消息處理和任務(wù)調(diào)度的隊(duì)列。因此,本文將主要為大家介紹如何利用redisTemplate處理消息隊(duì)列,感興趣的小伙伴可以了解一下2021-12-12Java倒計(jì)時(shí)三種實(shí)現(xiàn)方式代碼實(shí)例
這篇文章主要介紹了Java倒計(jì)時(shí)三種實(shí)現(xiàn)方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(53)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08解決偶現(xiàn)的MissingServletRequestParameterException異常問題
這篇文章主要介紹了解決偶現(xiàn)的MissingServletRequestParameterException問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java創(chuàng)建樹形結(jié)構(gòu)算法實(shí)例代碼
本篇文章主要介紹了Java創(chuàng)建樹形結(jié)構(gòu)算法實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01使用nacos實(shí)現(xiàn)自定義文本配置的實(shí)時(shí)刷新
我們都知道,使用Nacos時(shí),如果將Bean使用@RefreshScope標(biāo)注之后,這個(gè)Bean中的配置就會(huì)做到實(shí)時(shí)刷新,本文給大家介紹了如何使用nacos實(shí)現(xiàn)自定義文本配置的實(shí)時(shí)刷新,需要的朋友可以參考下2024-05-05Spring 中@Validated 分組校驗(yàn)的使用解析
這篇文章主要介紹了Spring 中@Validated 分組校驗(yàn)的使用解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10