中文字幕高清在线,中文字幕在线电影观看,中文字幕在线看,免费国产一区二区三区,男攻调教双性男总裁,热热涩热热狠狠色香蕉综合,亚洲精品网站在线观看不卡无广告

java總結(jié)

時(shí)間:2021-04-07 20:06:30 總結(jié) 我要投稿

java集合總結(jié)

java集合總結(jié)1

  java集合類(lèi)主要負(fù)責(zé)保存、盛裝其他數(shù)據(jù),因此集合類(lèi)也稱(chēng)容器類(lèi)。java集合類(lèi)分為:set、list、map、queue四大體系。其中set代表無(wú)序、不可重復(fù)的集合;list代表有序、可重復(fù)的集合。map代表具有映射關(guān)系的集合;queue代表隊(duì)列集合。

java集合總結(jié)

  java集合類(lèi)主要由兩個(gè)接口派生:Collection和Map,是集合框架的根接口。下面是其接口、子接口和實(shí)現(xiàn)類(lèi)的繼承樹(shù)。

  下面就一一介紹四大接口及其實(shí)現(xiàn)類(lèi)。

  Set接口。set集合不允許包含相同的元素。set判斷兩個(gè)對(duì)象是否相同是根據(jù)equals方法。如果兩個(gè)對(duì)象用equals方法返回的是true,set不會(huì)接受這兩個(gè)對(duì)象。

  HashSet是set接口的典型實(shí)現(xiàn),HashSet按hash算法來(lái)存儲(chǔ)集合中的元素。因此具有很好的存儲(chǔ)和查找性能。HashSet判斷兩個(gè)元素的標(biāo)準(zhǔn)是兩個(gè)元素的equals方法比較相等,同時(shí)兩個(gè)對(duì)象的hasCode()方法返回值也相等。HashSet可以保存null元素。

  List集合代表一個(gè)有序集合。集合中的每個(gè)元素都有其對(duì)應(yīng)的順序索引。Arraylist和vector是list接口的兩個(gè)典型實(shí)現(xiàn)。他們之間的顯著區(qū)別就是:vector是線(xiàn)性安全的,而arraylist不是。它們兩個(gè)都是基于數(shù)組實(shí)現(xiàn)的list類(lèi)。List還有一個(gè)基于鏈表實(shí)現(xiàn)的LinkedList類(lèi)。當(dāng)插入、刪除元素的速度非常快。這個(gè)類(lèi)比較特殊,功能也特別多,即實(shí)現(xiàn)了List接口,也實(shí)現(xiàn)了Dueue接口(雙向隊(duì)列)。可以當(dāng)成雙向隊(duì)列使用,也可以當(dāng)成棧使用。

  Queue用于模擬隊(duì)列的數(shù)據(jù)結(jié)構(gòu)。LinkedList和ArrayDueue是其兩個(gè)比較常用的實(shí)現(xiàn)類(lèi)。

  Map用于保存具有映射關(guān)系的數(shù)據(jù)。Map接口有如下幾個(gè)常用的實(shí)現(xiàn)類(lèi):HashMap、HashTable、TreeMap。TreeMap是基于紅黑樹(shù)對(duì)TreeMap中所有key進(jìn)行排序。HashMap和HashTable主要區(qū)別有兩點(diǎn):1、Hashtable是線(xiàn)性安全的,因此性能差些。2、HashMap可以使用null作為key或者value。

  集合類(lèi)還提供了一個(gè)工具類(lèi)Collections。主要用于查找、替換、同步控制、設(shè)置不可變集合。

  上面是對(duì)java集合類(lèi)的一般概述,下面就set、list、map三者之間的關(guān)系進(jìn)行剖析。

  Set與Map的關(guān)系。Map集合中所有key集中起來(lái),就組成了一個(gè)set集合。所以Map集合提供SetkeySet()方法返回所有key組成的set集合。由此可見(jiàn),Map集合中的所有key具有set集合的特征,只要Map所有的key集中起來(lái),它就是一個(gè)Set集合,這就實(shí)現(xiàn)了Map到Set的`轉(zhuǎn)換。同時(shí),如果把Map中的元素看成key-value的set集合,也可以實(shí)現(xiàn)從Set到Map之間的轉(zhuǎn)換。HashSet和HashMap分別作為它們的實(shí)現(xiàn)類(lèi)。兩者之間也挺相似的。HashSet的實(shí)現(xiàn)就是封裝了HashMap對(duì)象來(lái)存儲(chǔ)元素。它們的本質(zhì)是一樣的。類(lèi)似于HashSet和HashMap的關(guān)系,其實(shí)TreeMap和TreeSet本質(zhì)也差不多,TreeSet底層也是依賴(lài)TreeMap實(shí)現(xiàn)。

  Map與List的關(guān)系。把Map的key-value分開(kāi)來(lái)看,從另一個(gè)角度看,就可以把Map與List統(tǒng)一起來(lái)。

  Map集合是一個(gè)關(guān)聯(lián)數(shù)組,key可以組成Set集合,Map中的value可以重復(fù),所以這些value可以組成一個(gè)List集合。但是需要注意的是,實(shí)質(zhì)Map的values方法并未返回一個(gè)List集合。而是返回一個(gè)不存儲(chǔ)元素的Collection集合,換一種角度來(lái)看對(duì)List集合,它也包含了兩組值,其中一組就是虛擬的int類(lèi)型的索引,另一組就是list集合元素,從這個(gè)意思上看,List就相當(dāng)于所有key都是int型的Map。

  下面講解幾個(gè)相似類(lèi)之間的差異。

  ArrayList和LinkedList。ArrayList是一種順序存儲(chǔ)的線(xiàn)性表,其底層是采用數(shù)組實(shí)現(xiàn)的,而LinkedList是鏈?zhǔn)酱鎯?chǔ)的線(xiàn)性表。其本質(zhì)就是一個(gè)雙向鏈表。對(duì)于隨機(jī)存儲(chǔ)比較頻繁的元素操作應(yīng)選用ArrayList,對(duì)于經(jīng)常需要增加、刪除元素應(yīng)該選用LinkedList。但總的來(lái)說(shuō)ArrayList的總體性能還是優(yōu)于LinkedList。

  HashSet與HashMap的性能選項(xiàng)。主要有兩個(gè)方面:容量和負(fù)載因子(尺寸/容量)。較低負(fù)載因子會(huì)增加查詢(xún)數(shù)據(jù)的性能,但是會(huì)降低hash表所占的內(nèi)存開(kāi)銷(xiāo)。較高負(fù)載因子則反之,一般對(duì)數(shù)據(jù)的查詢(xún)比較頻繁,所以一般情況下初始容量應(yīng)該大一點(diǎn),但也不能太大,否則浪費(fèi)內(nèi)存空間。

java集合總結(jié)2

  一、數(shù)組、集合

  數(shù)組、集合:都是一種容器,用一個(gè)對(duì)象管理多個(gè)對(duì)象;

  數(shù)組:不能自動(dòng)增長(zhǎng);只能存放同類(lèi)型的元素

  集合:能自動(dòng)擴(kuò)容;部分集合允許存放不同類(lèi)型的元素;

  二、學(xué)習(xí)這些集合類(lèi)要掌握哪些東西:

  1)怎樣得到(選擇)集合對(duì)象;

  2)怎樣添加元素

  3)怎樣刪除元素

  4)怎樣循環(huán)遍歷沒(méi)一個(gè)元素

  三、list、set、map

  collection:父接口;

  Set:接口---一個(gè)實(shí)現(xiàn)類(lèi):HashSet

  List:接口---三個(gè)實(shí)現(xiàn)類(lèi):LinkedList,Vector,ArrayList

  SortedSet:接口---實(shí)現(xiàn)類(lèi):TreeSet

  1、List:

  List:有序列表,允許存放重復(fù)的元素;

  實(shí)現(xiàn)類(lèi):

  ArrayList:數(shù)組實(shí)現(xiàn),查詢(xún)快,增刪慢,線(xiàn)程不安全,輕量級(jí);下標(biāo)也是從0開(kāi)始;

  LinkedList:鏈表實(shí)現(xiàn),增刪快,查詢(xún)慢

  Vector:數(shù)組實(shí)現(xiàn),線(xiàn)程安全,重量級(jí)

  2.Set:

  無(wú)序集合,不允許存放重復(fù)的元素;

  實(shí)現(xiàn)類(lèi)HashSet:equals返回true,hashCode返回相同的整數(shù);哈希表;

  子接口SortedSet:對(duì)Set排序?qū)崿F(xiàn)類(lèi):TreeSet:二叉樹(shù)實(shí)現(xiàn)的;

  看API:泛型:表示一個(gè)對(duì)象;

  Iterator:接口,迭代器;

  java.util;

  hasNext();

  next();

  remove();

  Iterable:可迭代的,訪問(wèn)的;

  ng;實(shí)現(xiàn)了可迭代的接口就可以用迭代的方式訪問(wèn);

  只需實(shí)現(xiàn)iterator();方法即可;Iteratoriterator();

  三種循環(huán)的訪問(wèn)方式:

  只有實(shí)現(xiàn)了Iterable接口的才能用第三種;能用第二種的也一定能用第三種;

  ArrayList:自動(dòng)擴(kuò)容,是數(shù)組照搬過(guò)來(lái)的;

  3.Map

  HashMap:鍵值對(duì),key不能重復(fù),但是value可以重復(fù);key的實(shí)現(xiàn)就是HashSet;value對(duì)應(yīng)著放;

  HashSet的后臺(tái)有一個(gè)HashMap;初始化后臺(tái)容量;只不過(guò)生成一個(gè)HashSet的話(huà),系統(tǒng)只提供key的訪問(wèn);

  如果有兩個(gè)Key重復(fù),那么會(huì)覆蓋之前的;

  Hashtable:線(xiàn)程安全的

  Properties:java.util.Properties;key和value都是String類(lèi)型,用來(lái)讀配置文件;

  HashMap與Hashtable區(qū)別:

  HashMap線(xiàn)程不安全的,允許null作為key或value;

  Hashtable線(xiàn)程安全的,不允許null作為key或value;

  TreeMap:對(duì)key排好序的Map;key就是TreeSet,value對(duì)應(yīng)每個(gè)key;

  key要實(shí)現(xiàn)Comparable接口或TreeMap有自己的構(gòu)造器;

  HashSet:remove(Objecto)的原則看這個(gè)對(duì)象O的Hashcode和equals是否相等,并不是看是不是一個(gè)對(duì)象;

  定義一個(gè)Map;key是課程名稱(chēng),value是Integer表示選課人數(shù);

  map.put(cou,map.get(cou)+newInteger(1));

  四、Hashtable、Properties

  1,Hashtable:實(shí)現(xiàn)了Map接口,此類(lèi)實(shí)現(xiàn)一個(gè)哈希表,作用和HashMap相同。任何非null對(duì)象都可以用作鍵或值。為了成功地在哈希表中存儲(chǔ)和獲取對(duì)象,用作鍵的對(duì)象必須實(shí)現(xiàn)hashCode方法和equals法。

  2,Properties:繼承自Hashtable,比Hashtable更嚴(yán)格屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。

  常用方法StringgetProperty(String?key)和setProperty(Stringkey,Stringvalue);

  用法:我在C盤(pán)下建了一個(gè)名為yy.dat的文件,文件的內(nèi)容為:

  name=hehe

  password=12345

  執(zhí)行以下程序,輸出hehe,可見(jiàn)用Properties可以很方便的解析配置文件

  Propertiesp=newProperties();

  p.load(newFileInputStream("C:yy.dat"));

  System.out.println(p.getProperty("name"))

  五、兩個(gè)工具類(lèi)Arrays和Collections

  1.Arrays、此類(lèi)包含用來(lái)操作數(shù)組(比如排序和搜索)的各種方法。此類(lèi)還包含一個(gè)允許將數(shù)組作為列表來(lái)查看的靜態(tài)工廠

  2.Collections、主要提供了在collection上進(jìn)行操作的靜態(tài)方法

  六、遺留的幾個(gè)類(lèi)

  1.Hashtable,作用和HashMap相同,不過(guò)它是線(xiàn)程安全的,如果不需要線(xiàn)程安全,應(yīng)該使用HashMap

  2.Enumeration,遺留集合使用枚舉接口來(lái)遍歷元素,它有兩個(gè)方法,hasMoreElements和nextElement,用法類(lèi)似Iterator。

  3.Stack,繼承自Vector,實(shí)現(xiàn)了棧的功能,提供了push()方法押棧和pop()方法出棧。

  4.BitSet,位集。如果需要高效率的存儲(chǔ)一個(gè)位序列,例如一個(gè)標(biāo)志序列,請(qǐng)使用位集。它可以對(duì)各個(gè)位進(jìn)行

  讀取get(i)

  設(shè)置set(i)

  清楚clear(i)

  七、常見(jiàn)筆試題目匯總

  1.Collection和Collections的區(qū)別。

  Collection是集合類(lèi)的上級(jí)接口,繼承與他的接口主要有Set和List.

  Collections是針對(duì)集合類(lèi)的一個(gè)幫助類(lèi),他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線(xiàn)程安全化等操作。

  2.List,Set,Map是否繼承自Collection接口?

  List,Set是,Map不是

  3.兩個(gè)對(duì)象值相同(x.equals(y)==true),但卻可有不同的hashcode,這句話(huà)對(duì)不對(duì)?

  不對(duì),有相同的hashcode。

  4.你所知道的集合類(lèi)都有哪些?主要方法?

  最常用的集合類(lèi)是List和Map。List的具體實(shí)現(xiàn)包括ArrayList和Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲(chǔ)和操作任何類(lèi)型對(duì)象的元素列表。List適用于按數(shù)值索引訪問(wèn)元素的情形。

  Map提供了一個(gè)更通用的元素存儲(chǔ)方法。Map集合類(lèi)用于存儲(chǔ)元素對(duì)(稱(chēng)作"鍵"和"值"),其中每個(gè)鍵映射到一個(gè)值。

  5.排序都有哪幾種方法?請(qǐng)列舉。用JAVA實(shí)現(xiàn)一個(gè)快速排序。

  排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數(shù)排序)

  快速排序的偽代碼。

  //使用快速排序方法對(duì)a[0:n-1]排序

  從a[0:n-1]中選擇一個(gè)元素作為middle,該元素為支點(diǎn)

  把余下的元素分割為兩段left和right,使得left中的元素都小于等于支點(diǎn),而right中的元素都大于等于支點(diǎn)

  遞歸地使用快速排序方法對(duì)left進(jìn)行排序

  遞歸地使用快速排序方法對(duì)right進(jìn)行排序

  所得結(jié)果為left+middle+right

  6.HashMap和Hashtable的區(qū)別

  都屬于Map接口的類(lèi),實(shí)現(xiàn)了將惟一鍵映射到特定的值上。

  HashMap類(lèi)沒(méi)有分類(lèi)或者排序。它允許一個(gè)null鍵和多個(gè)null值。

  Hashtable類(lèi)似于HashMap,但是不允許null鍵和null值。它也比HashMap慢,因?yàn)樗峭降摹?/p>

  7.Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用==還是equals()它們有何區(qū)別?

  Set里的元素是不能重復(fù)的,那么用iterator()方法來(lái)區(qū)分重復(fù)與否。

  equals()是判讀兩個(gè)Set是否相等。

  equals()和==方法決定引用值是否指向同一對(duì)象equals()在類(lèi)中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類(lèi)型相配的話(huà),返回真值。

【java集合總結(jié)】相關(guān)文章:

java實(shí)訓(xùn)報(bào)告集合7篇04-15

java個(gè)人年終工作總結(jié)05-04

計(jì)算機(jī)Java實(shí)習(xí)報(bào)告03-21

java實(shí)訓(xùn)報(bào)告(7篇)04-15

java項(xiàng)目經(jīng)理求職簡(jiǎn)歷模板04-18

java實(shí)習(xí)生簡(jiǎn)歷自我評(píng)價(jià)04-18

java實(shí)訓(xùn)報(bào)告集錦7篇04-15

java程序員個(gè)人簡(jiǎn)歷范文03-02

java開(kāi)發(fā)求職簡(jiǎn)歷經(jīng)典范文12-17

JAVA程序員自我推薦信08-18