激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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()判斷兩個數組是否相等

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产91极品| 免费午夜网站 | 中文字幕亚洲一区二区三区 | 国产免费成人在线 | 鲁人人人鲁人人鲁精品 | 逼片 | 91午夜少妇三级全黄 | 史上最强炼体老祖动漫在线观看 | 得得啪在线 | 中文字幕四区 | 黄色片网站免费 | 国产成人精品午夜视频' | 日本视频免费观看 | 精品国产91久久久久久久妲己 | 国产一区二区免费看 | 欧美成年人视频在线观看 | 欧美精品久久久久久久久久 | 国产69精品久久久久99尤 | 超碰在线97国产 | 国产99久久精品一区二区300 | 成人做爰高潮片免费视频美国 | 欧美成人一级 | 国产喷白浆10p | 成人性视频欧美一区二区三区 | 亚洲精品久久久久久久久久久 | 精品国产一区二区久久 | 广西一级毛片 | 美女又黄又www | 99久久久精品免费观看国产 | 色妞妞视频 | 久久在现视频 | 久草在线资源视频 | 高清国产免费 | 亚洲乱搞 | 91久久久久久久一区二区 | 成人免费激情视频 | 国产午夜电影在线观看 | 欧美日韩经典在线 | 91麻豆精品国产91久久久无需广告 | 日韩视频中文 | 视频在线中文字幕 |