欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

千鋒扣丁學(xué)堂Java培訓(xùn)之容器類知識(shí)點(diǎn)詳細(xì)總結(jié)

2019-06-21 14:43:30 3263瀏覽

今天千鋒扣丁學(xué)堂Java培訓(xùn)老師給大家分享一篇關(guān)于java容器類知識(shí)點(diǎn)詳細(xì)總結(jié),希望對(duì)同學(xué)們學(xué)習(xí)有所幫助,下面我們一起來(lái)看一下吧。

1.java容器分類圖




2.容器類接口和抽象容器類

2.1說(shuō)明

容器接口是容器的基礎(chǔ)。使用接口可以將容器的實(shí)現(xiàn)與容器接口分開(kāi),因而可以使用相同的方法訪問(wèn)容器而不需關(guān)心容器具體的數(shù)據(jù)結(jié)構(gòu)。

同理,Iterator接口也使用戶能夠使用相同的方法訪問(wèn)不同的容器類。

2.2容器接口(Collection,Map,Iterator)

1)collection接口

boolean add(Object obj): 添加對(duì)象,集合發(fā)生變化則返回true
Iterator iterator():返回Iterator接口的對(duì)象
int size()
boolean isEmpty()
boolean contains(Object obj)
void clear()
<T> T[] toArray(T[] a)

2)Map接口(存放鍵值對(duì),Map中的值也可以是一個(gè)容器)

Object get(Object key)
Object put(Object key, Object value)
Set keySet() : returns the keys set Set<K> keySet()
Set entrySet(): returns mappings set Set<Map.Entry<K,V>> entrySet()
containsKey()
containsValue()

3)Iterator接口

Object next()
boolean hasNext()
void remove()

注意:remove函數(shù)不能連續(xù)執(zhí)行多次,否則返回IllegalStateException

(ifthenextmethodhasnotyetbeencalled,ortheremovemethodhasalreadybeencalledafterthelastcalltothenextmethod.)

通常用法:

Iterator it=collection.iterator();
    while(it.hasNext())
    {
     Object obj=it.next();
    //do something 
    }

2.3子接口(List,Set,ListIterator,SortedMap,SortedSet)

1)List(有順序可以重復(fù),有順序所以操作時(shí)可以在方法中加入索引參數(shù),如下:)

boolean add(E element)
void add(int index, E element) 
E set(int index, E element)
E get(int index);

2)Set(無(wú)順序不可以重復(fù),無(wú)序因而不能通過(guò)索引操作對(duì)象)

3)ListIterator(IteratorforList,List是雙向表,因而在Iterator上增加了一些新的方法,允許traversetheListineitherdirection)

boolean hasPrevious();
E previous();
int previousIndex()

4)SortedMap

說(shuō)明:保證按照鍵的升序排列的映射,可以按照鍵的自然順序(Comparable接口)進(jìn)行排序,或者通過(guò)創(chuàng)建有序映射時(shí)提供的比較器進(jìn)行排序

(AMapthatfurtherprovidesatotalorderingonitskeys.Themapisorderedaccordingtothenaturalorderingofitskeys,orbyaComparatortypicallyprovidedatsortedmapcreationtime)

public interface SortedMap<K,V>extends Map<K,V>
Comparator comparator()
Object firstKey()
Object lastKey()

5)SortedSet

主要用于排序操作,實(shí)現(xiàn)此接口的子類都是排序的子類

public interface SortedSet<E>extends Set<E>
  * Comparator comparator()
  * E first() :返回第一個(gè)元素
  * E last() 
* SortedSet<E> headSet(E toElement): 返回less than toElement
  * SortedSet<E> tailSet(E fromElement)
  * SortedSet<E> subSet(E fromElement)

2.4抽象容器類

1)說(shuō)明:使用抽象容器類可以方便的定義類,而不用在每個(gè)類中都實(shí)現(xiàn)容器接口container中的所有的方法

2)包含:

* AbstractCollection     public abstract class AbstractCollection<E>extends Objectimplements Collection<E>
  * AbstractList public abstract class AbstractList<E>extends AbstractCollection<E>implements List<E>
  * AbstractSet        public abstract class AbstractSet<E>extends AbstractCollection<E>implements Set<E>
  * AbstactMap public abstract class AbstractMap<K,V>extends Object implements Map<K,V>
  * AbstractSequentialList public abstract class AbstractSequentialList<E> extends AbstractList<E>

3.具體容器類

3.1概括

1)collection:ArrayList,LinkedLsit,Vector,Stack

TreeSet,HashSet,LinkedHashSet

2)Map:HashMap,LinkedHashMap,WeakHashMap,TreeMap,HashTable,IdentityHashTable(其中key的比較是通過(guò)==而不是equals)

3.2常用的容器類

1)ArrayList與LinkedList(均非同步,多線程時(shí)需要考慮線程安全問(wèn)題),Vector(同步),Stack

1.List接口支持通過(guò)索引的方法來(lái)訪問(wèn)元素:ArrayList隨機(jī)訪問(wèn)快改慢;LinkedList改快隨機(jī)訪問(wèn)慢;Vector實(shí)現(xiàn)了同步,因而比ArrayList慢

2.LinkedList使用雙向鏈表實(shí)現(xiàn)LinkedList提供額外的get,remove,insert方法在LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊(duì)列(queue)或雙向隊(duì)列(deque)。

3.ArrayList沒(méi)有定義增長(zhǎng)算法,當(dāng)需要插入大量元素是,可調(diào)用ensureCapacity方法提高添加效率

4.Vector類似與ArrayList,但是是同步的,多線程安全(另外一點(diǎn)區(qū)別是ArrayList擴(kuò)容時(shí)默認(rèn)增長(zhǎng)一半,Vector增長(zhǎng)一倍)。無(wú)論是單線程還是多線程,Vector都比ArrayList慢

5.Stack繼承自Vector,實(shí)現(xiàn)一個(gè)后進(jìn)先出的堆棧

6.若需要實(shí)現(xiàn)同步可以調(diào)用Collections工具類的synchronizedList方法,如下:

List list = Collections.synchronizedList(new ArrayList());
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
或者:
List list = Collections.synchronizedList(new LinkedList());

或者:

Listlist=Collections.synchronizedList(newLinkedList());

7.定義如下:(注意LinkedList實(shí)現(xiàn)了Deque)

public class ArrayList<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, Serializable
public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, Serializable
public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, Serializable

2)TreeSet,HashSet,LinkedHashSet(HashSet,TreeSet不是線程安全的)

1.TreeSet是SortedSet接口的唯一實(shí)現(xiàn)類,TreeSet可以確保集合元素處于排序狀態(tài),效率很高,可提高程序的效率;TreeSet通過(guò)compareTo或者compare排序,因而只要值相等即使equals不等(不同對(duì)象)也不能加到集合中(failstoobeySetinterface)

2.HashSet,效率很高,和TreeSet不同的是通過(guò)比較對(duì)象的equals區(qū)分不同對(duì)象,這樣不同的對(duì)象可以不被重復(fù)的加入到集合中。

hashCode()函數(shù)不好確定,對(duì)象默認(rèn)的hashCode函數(shù)試對(duì)象的內(nèi)存地址值,hashCode函數(shù)的好壞是HashSet性能的關(guān)鍵。

3.LinkedHashSet,和HashSet相同,同樣是根據(jù)元素的hashCode值來(lái)決定元素的存儲(chǔ)位置,但是它同時(shí)使用鏈表維護(hù)元素的次序。LinkedHashSet在迭代訪問(wèn)Set中的全部元素時(shí),性能比HashSet好,但是插入時(shí)性能稍微遜色于HashSet。

4.Set可以插入null,最多一個(gè)null

3)HashMap(非同步),HashTable(線程安全),TreeMap,WeakHashMap

1.HashTable與HashMap區(qū)別:(詳情請(qǐng)查看HashTable與HashMap)

Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類。但二者都實(shí)現(xiàn)了Map接口。

Hashtable中的方法是Synchronize的,而HashMap中的方法在缺省情況下是非Synchronize的

Hashtable中,key和value都不允許出現(xiàn)null值;HashMap中,null可以作為鍵,這樣的鍵只有一個(gè);可以有一個(gè)或多個(gè)鍵所對(duì)應(yīng)的值為null

HashTable直接使用對(duì)象的hashCode。而HashMap重新計(jì)算hash值。

2.WeakHashMap是一種改進(jìn)的HashMap,它對(duì)key實(shí)行“弱引用”,WeakHashMap使用元素的引用而不是值作為key,也就是說(shuō)必須在引用相同(a==b)的情況下才能找到相關(guān)的值。另外,如果一個(gè)key不再被外部所引用,那么該key可以被GC回收。

3.TreeMap是SortedMap接口的基于紅黑樹(shù)的實(shí)現(xiàn)。此類保證了映射按照升序順序排列關(guān)鍵字,根據(jù)使用的構(gòu)造方法不同,可能會(huì)按照鍵的類的自然順序進(jìn)行排序

4.定義如下:

public class Hashtable extends Dictionary implements Map, Cloneable, Serializable 
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable 
public class TreeMap<K,V>extends AbstractMap<K,V>implements NavigableMap<K,V>, Cloneable, Serializable

4.容器類使用補(bǔ)充

1)使用抽象編程思想,創(chuàng)建時(shí)使用父類引用指向子類對(duì)象,返回時(shí)返回抽象接口

2)如果涉及到堆棧,隊(duì)列等操作,應(yīng)該考慮用List,對(duì)于需要快速插入,刪除元素,應(yīng)該使用LinkedList,如果需要快速隨機(jī)訪問(wèn)元素,應(yīng)該使用ArrayList。

3)如果程序在單線程環(huán)境中使用非同步的類,其效率較高

4)可以使用Collections工具類中unmodifiableList/unmodifiableMap/unmodifiableSet/unmodifiableSortedMap/unmodifiableSortedSet等創(chuàng)建不能修改的List,Map,List等

5)可以使用Collections工具類中Collections.synchronizedList(newArrayList())等實(shí)現(xiàn)同步

6)可以使用Arrays.equal()判斷兩個(gè)數(shù)組是否相等

以上就是關(guān)于千鋒扣丁學(xué)堂Java培訓(xùn)之容器類知識(shí)點(diǎn)詳細(xì)總結(jié)的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,想要了解更多關(guān)于Java開(kāi)發(fā)方面內(nèi)容的小伙伴,請(qǐng)關(guān)注扣丁學(xué)堂Java培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育有專業(yè)的Java講師為您指導(dǎo),此外扣丁學(xué)堂老師精心推出的Java視頻教程定能讓你快速掌握J(rèn)ava從入門(mén)到精通開(kāi)發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Java技術(shù)交流群:850353792。


                        JavaEE/微服務(wù)/源碼解析/分布式/企業(yè)級(jí)架構(gòu)【VIP體驗(yàn)課】


     【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】       【掃碼進(jìn)入JavaEE/微服務(wù)VIP免費(fèi)公開(kāi)課】  



查看更多關(guān)于“Java開(kāi)發(fā)資訊”的相關(guān)文章>>

標(biāo)簽: Java培訓(xùn) Java視頻教程 Java多線程 Java面試題 Java學(xué)習(xí)視頻 Java開(kāi)發(fā)

熱門(mén)專區(qū)

暫無(wú)熱門(mén)資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部