日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java的容器类有哪些实现方式_Java基础--容器类

發(fā)布時間:2024/9/27 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的容器类有哪些实现方式_Java基础--容器类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

面試官:Java的容器類你有什么了解嗎?

-:額,沒有用過....

面試官:你肯定用過,但你沒有注意過....

-:應(yīng)該是吧....

你知道什么是容器類嗎?Java容器可以說是增強(qiáng)程序員編程能力的基本工具,本文將與您一起理解容器類,看完之后你也許會恍然大悟,這原來就是容器類啊,一起避免面試時的尷尬!!!!

1.容器的用途

如果對象的數(shù)量與生命周期都是固定的,自然我們也就不需要很復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

我們可以通過創(chuàng)建引用來持有對象,如

Class clazz;

也可以通過數(shù)組來持有多個對象,如

Class[] clazs = new Class[10];

然而,一般情況下,我們并不知道要創(chuàng)建多少對象,或者以何種方式創(chuàng)建對象。數(shù)組顯然只能創(chuàng)建固定長度的對象,為了使程序變得更加靈活與高效,Java類庫提供了一套完整的容器類,具備完善的方法來解決上述問題。

2.容器的類別

容器的類別

]

觀察上圖,我們可以得出容器主要分為兩種類型,兩個接口Collection與Map定義了兩類不同的對象存儲方式。

Collection用以保存單一的元素,Map保存關(guān)聯(lián)鍵值對。通過泛型來指定容器存放的數(shù)據(jù)類型。** Iterator 設(shè)計的目的是在未知容器具體的類型的情況下,用來遍歷容器元素。剩下的容器類型都是繼承了這兩個接口。

在實(shí)際編碼中,通過向上轉(zhuǎn)型**為接口,在其與代碼中都使用這個接口是非常普遍的使用方式。如下:

import java.util.*;

public class TestCollection {

public static void main(String[] args){

Collection c = new ArrayList();

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

c.add(i);

}

for(Integer i : c){

System.out.print(i + ", ");

}

}

}

注:由于List接口的方法比Collection更為豐富,所以 實(shí)際應(yīng)用中,ArrayList向上轉(zhuǎn)型為List更為合適。

剛剛接觸容器的朋友們可能會只把Collection與Map當(dāng)做接口,實(shí)際上并非如此,容器中的接口其實(shí)有六個。

3. 容器中的七大接口

1.Collection接口

2.Map接口

3.Set接口

4.List接口

5.Queue接口

6.Iterator接口

7.Comparable接口

其中List, Queue和Set接口繼承了Collection接口,剩下的接口之間都是相互獨(dú)立的,無繼承關(guān)系。List和Set接口主要是為了區(qū)分是否要包含重復(fù)元素,Iterater迭代器則是為了更靈活的迭代集合,與foreach一起使用。Comparable接口則用于比較。

4. 各類容器的功能(主要實(shí)現(xiàn)類分析)

.Collection接口

List接口(相比Collection, 添加了新的方法)

ArrayList

實(shí)現(xiàn)List接口,類似于動態(tài)數(shù)組,適用于大量隨機(jī)訪問的情況。但插入和刪除的代價非常高昂

LinkedList

實(shí)現(xiàn)List接口,類似于鏈表,也提供了優(yōu)化的順序訪問。在插入和刪除方面代價低廉,隨機(jī)訪問代價較高

Set接口(方法與Collection完全相同)

HashSet

HashSet使用了散列函數(shù)實(shí)現(xiàn),極大的提高了訪問速度,集合中的對象是沒有順序的。存入HashSet的對象必須定義hashCode()

TreeSet

TreeSet使用紅黑樹來實(shí)現(xiàn)存儲元素, 紅黑樹的好處是可以插入之后維持集合的有序性,從而保證在遍歷的時候,按照遞增的順序獲取對象。

LinkedHashSet

顧名思義,LinkedHashSet使用了鏈表來保持插入順序,不過為了提高查詢效率,也使用了散列。

Queue接口

LinkedList

LinkedList實(shí)現(xiàn)了Queue接口,提供了方法支持隊列的行為,在以后的系列我們會深入講解如何用LinkedList實(shí)現(xiàn)隊列。

PriorityQueue

與普通隊列不同,優(yōu)先隊列每次彈出的是優(yōu)先級最高的元素??梢酝ㄟ^提供自己的Comparator來修改默認(rèn)的優(yōu)先級順序。

Map接口

HashMap

HashMap通過散列機(jī)制,用來快速訪問,適用于添加、刪除和定位映射關(guān)系。允許鍵對象為null,但因?yàn)殒I對象是唯一的,所以只允許有一個null。

TreeMap

TreeMap保持"key"處于排序狀態(tài),不允許鍵值為null,訪問速度不如HashMap

LinkedHashMap 。

LinkedHashMap保持元素插入時順序,同時提供散列實(shí)現(xiàn)快速訪問 。

關(guān)于Map的散列實(shí)現(xiàn)是非常重要的,實(shí)現(xiàn)Map的原理(關(guān)聯(lián)數(shù)組等)。

import java.util.*;

public class IntegerSet{

private static Random rand;

public static void main(String[] args){

rand = new Random(47);

Set intset = new HashSet();

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

intset.add(rand.nextInt(30));

}

System.out.println(intset);

}

}

5.總結(jié)

通過本文的回顧,相信讀者對容器的用途,分類,以及容器的層次結(jié)構(gòu)與一些常用容器的基本功能和用法有了較為清晰地了解。然而,想要更好的使用容器類,還必須了解每種容器具體的方法,源碼,以及線程安全的實(shí)現(xiàn),但是以上這些應(yīng)對一下面試官應(yīng)該還可以吧。

總結(jié)

以上是生活随笔為你收集整理的java的容器类有哪些实现方式_Java基础--容器类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。