一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java容器類知識點詳細總結

java容器類知識點詳細總結

2019-06-26 13:03wishyouhappy Java教程

1.java容器分類圖 2.容器類接口和抽象容器類 2.1 說明 容器接口是容器的基礎。使用接口可以將容器的實現與容器接口分開,因而可以使用相同的方法訪問容器而不需關心容器具體的數據結構。 同理,Iterator接口也使用戶能夠使用相

1.java容器分類圖

java容器類知識點詳細總結

java容器類知識點詳細總結

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

2.1 說明

容器接口是容器的基礎。使用接口可以將容器的實現與容器接口分開,因而可以使用相同的方法訪問容器而不需關心容器具體的數據結構。

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

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

1)collection接口

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

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

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函數不能連續執行多次,否則返回IllegalStateException

( if the next method has not yet been called, or the remove method has already been called after the last call to the next method.)

通常用法:

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

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

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

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

2)Set(無順序不可以重復,無序因而不能通過索引操作對象)

3)ListIterator(Iterator for List,List是雙向表,因而在Iterator上增加了一些新的方法,允許traverse the List in either direction)

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

4) SortedMap

說明:保證按照鍵的升序排列的映射,可以按照鍵的自然順序( Comparable 接口)進行排序, 或者通過創建有序映射時提供的比較器進行排序

(A Map that further provides a total ordering on its keys. The map is ordered according to the natural ordering of its keys, or by a Comparator typically provided at sorted map creation time)

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

5)SortedSet 

主要用于排序操作,實現此接口的子類都是排序的子類

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

2.4抽象容器類

1)說明:使用抽象容器類可以方便的定義類,而不用在每個類中都實現容器接口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的比較是通過==而不是equals)

3.2常用的容器類

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

1. List 接口支持通過索引的方法來訪問元素:ArrayList 隨機訪問快改慢;LinkedList改快隨機訪問慢;Vector實現了同步,因而比ArrayList慢

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

3. ArrayList沒有定義增長算法,當需要插入大量元素是,可調用ensureCapacity方法提高添加效率

4. Vector類似與ArrayList,但是是同步的,多線程安全(另外一點區別是ArrayList擴容時默認增長一半,Vector增長一倍)。無論是單線程還是多線程,Vector都比ArrayList慢

5. Stack繼承自Vector,實現一個后進先出的堆棧

6.若需要實現同步可以調用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());

7.定義如下:(注意LinkedList實現了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接口的唯一實現類,TreeSet可以確保集合元素處于排序狀態,效率很高,可提高程序的效率;TreeSet通過compareTo或者compare排序,因而只要值相等即使equals不等(不同對象)也不能加到集合中(fails to obey Set interface)

2. HashSet,效率很高,和TreeSet不同的是通過比較對象的equals區分不同對象,這樣不同的對象可以不被重復的加入到集合中。

hashCode()函數不好確定,對象默認的hashCode函數試對象的內存地址值,hashCode函數的好壞是HashSet性能的關鍵。

3. LinkedHashSet,和HashSet相同,同樣是根據元素的hashCode值來決定元素的存儲位置,但是它同時使用鏈表維護元素的次序。LinkedHashSet在迭代訪問Set中的全部元素時,性能比HashSet好,但是插入時性能稍微遜色于HashSet。

4. Set可以插入null,最多一個null

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

1.HashTable與HashMap區別:(詳情請查看HashTable與HashMap)

  •  Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類。但二者都實現了Map接口。
  • Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情況下是非Synchronize的
  • Hashtable中,key和value都不允許出現null值;HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應 的值為null
  • HashTable直接使用對象的hashCode。而HashMap重新計算hash值。

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

3. TreeMap是SortedMap接口的基于紅黑樹的實現。此類保證了映射按照升序順序排列關鍵字, 根據使用的構造方法不同,可能會按照鍵的類的自然順序進行排序

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.容器類使用補充

1)使用抽象編程思想,創建時使用父類引用指向子類對象,返回時返回抽象接口

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

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

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

5)可以使用Collections工具類中Collections.synchronizedList(new ArrayList())等實現同步

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
  • Java教程java 中鎖的性能提高辦法

    java 中鎖的性能提高辦法

    這篇文章主要介紹了java 中鎖的性能提高辦法的相關資料,需要的朋友可以參考下...

    Java之家3092020-08-13
  • Java教程Java list.remove( )方法注意事項

    Java list.remove( )方法注意事項

    這篇文章主要介紹了Java list.remove( )方法注意事項,非常簡單易懂,需要的朋友可以參考下...

    妖久9552021-05-25
  • Java教程JAVA中通過自定義注解進行數據驗證的方法

    JAVA中通過自定義注解進行數據驗證的方法

    java 自定義注解驗證可自己添加所需要的注解,下面這篇文章主要給大家介紹了關于JAVA中通過自定義注解進行數據驗證的相關資料,文中通過示例代碼介紹...

    Decouple6362021-05-25
  • Java教程淺談Java(SpringBoot)基于zookeeper的分布式鎖實現

    淺談Java(SpringBoot)基于zookeeper的分布式鎖實現

    這篇文章主要介紹了Java(SpringBoot)基于zookeeper的分布式鎖實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    LJY_SUPER5742021-07-21
  • Java教程springboot ehcache 配置使用方法代碼詳解

    springboot ehcache 配置使用方法代碼詳解

    EhCache是一個比較成熟的Java緩存框架,Springboot對ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也簡易,今天給大家分享spri...

    m1719309529412912021-09-16
  • Java教程JavaWeb 實現驗證碼功能(demo)

    JavaWeb 實現驗證碼功能(demo)

    在 WEB-APP 中一般應用于:登錄、注冊、買某票、秒殺等場景,大家都接觸過這個驗證碼操作,今天小編通過實例代碼給大家講解javaweb實現驗證碼功能,需要...

    java教程網12832020-08-05
  • Java教程Java之Springcloud Feign組件詳解

    Java之Springcloud Feign組件詳解

    這篇文章主要介紹了Java之Springcloud Feign組件詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    深情以改10322021-11-12
  • Java教程SpringBoot引入Thymeleaf的實現方法

    SpringBoot引入Thymeleaf的實現方法

    這篇文章主要介紹了SpringBoot引入Thymeleaf的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Bobby6472021-07-28
主站蜘蛛池模板: 啪啪国产视频 | 色美| 国产一及毛片 | 91进入蜜桃臀在线播放 | 欧美最猛性xxxxx动态图 | 久久久久久免费高清电影 | 欧美日韩国产最新一区二区 | 无限好资源免费观看 | 欧美亚洲一区二区三区 | 亚洲国产资源 | 91在线视频免费观看 | 色帝国亚洲欧美在线蜜汁tv | 5g影院天天爽 | 男人插曲女人下面 | 国产亚洲精品美女久久久 | 亚洲同性男男gay1069 | 国产精品福利在线观看入口 | 午夜福利理论片高清在线 | 亚洲日本va中文字幕 | 久久久亚洲国产精品主播 | 亚洲国产精品无圣光一区二区 | 狠狠色综合久久婷婷色天使 | 乌克兰粉嫩摘花第一次 | 免费yjsp妖精com | 国产小嫩模好紧 | 91免费永久国产在线观看 | 韩国三级hd中文字幕李采潭 | 香港日本三级亚洲三级 | 国产a一级毛片爽爽影院 | 精品四虎国产在免费观看 | 亚洲精品国产在线 | 亚洲天堂精品视频 | 13日本xxxxxxxxx18 1313午夜精品久久午夜片 | 18未年禁止免费观看 | 男人狂躁女人下面的视频免费 | 91精品久久| 万域之王动漫在线观看全集免费播放 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 欧美日韩国产成人综合在线影院 | 翁公与小莹在客厅激情 | 国产成人夜色影视视频 |