最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java容器類知識點詳細(xì)總結(jié)

 更新時間:2019年06月21日 08:57:31   作者:wishyouhappy  
這篇文章主要介紹了java容器類知識點詳細(xì)總結(jié),

1.java容器分類圖

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

2.1 說明

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

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

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

1)collection接口

boolean add(Object obj): 添加對象,集合發(fā)生變化則返回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函數(shù)不能連續(xù)執(zhí)行多次,否則返回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(有順序可以重復(fù),有順序所以操作時可以在方法中加入索引參數(shù),如下:)

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

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

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

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

4) SortedMap

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

(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 

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

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

3.2常用的容器類

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

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

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

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

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

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

6.若需要實現(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());

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

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

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

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

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

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

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

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

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

3. TreeMap是SortedMap接口的基于紅黑樹的實現(xiàn)。此類保證了映射按照升序順序排列關(guān)鍵字, 根據(jù)使用的構(gòu)造方法不同,可能會按照鍵的類的自然順序進(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)建時使用父類引用指向子類對象,返回時返回抽象接口

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

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

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java的方法重載與變量作用域簡介

    Java的方法重載與變量作用域簡介

    這篇文章主要介紹了Java的方法重載與變量作用域,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • 淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)

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

    這篇文章主要介紹了Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • spring框架cacheAnnotation緩存注釋聲明解析

    spring框架cacheAnnotation緩存注釋聲明解析

    這篇文章主要介紹了spring框架中cacheAnnotation注釋聲明緩存解析示例有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Spring?Cloud?Gateway集成Sentinel流控詳情

    Spring?Cloud?Gateway集成Sentinel流控詳情

    這篇文章主要介紹了Spring?Cloud?Gateway集成Sentinel流控詳情,Sentinel支持對Spring?Cloud?Gateway、Zuul等主流的API?Gateway進(jìn)行限流,需要的朋友可以參考一下
    2022-09-09
  • 10個Java文件操作必備技巧分享

    10個Java文件操作必備技巧分享

    在我們?nèi)粘5拈_發(fā)中,文件操作是一個非常重要的主題。文件讀寫、文件復(fù)制、任意位置讀寫、緩存等技巧都是我們必須要掌握的。本文為大家整理了10個實用的文件操作技巧,希望對大家有所幫助
    2023-04-04
  • java實現(xiàn)創(chuàng)建縮略圖、伸縮圖片比例生成的方法

    java實現(xiàn)創(chuàng)建縮略圖、伸縮圖片比例生成的方法

    這篇文章主要介紹了java實現(xiàn)創(chuàng)建縮略圖、伸縮圖片比例生成的方法,可實現(xiàn)針對圖片大小的縮放功能,是Java針對圖片操作的典型應(yīng)用,需要的朋友可以參考下
    2014-11-11
  • Java對象數(shù)組定義與用法詳解

    Java對象數(shù)組定義與用法詳解

    這篇文章主要介紹了Java對象數(shù)組定義與用法,結(jié)合實例形式分析了java對象數(shù)組的概念、功能、定義與使用方法,需要的朋友可以參考下
    2019-08-08
  • SpringBoot使用@Validated處理校驗的方法步驟

    SpringBoot使用@Validated處理校驗的方法步驟

    @Validated?注解的主要目的是啟用和利用?Spring?的驗證框架,它可以用于類上也可以用于方法參數(shù)上,本文給大家介紹了SpringBoot使用@Validated優(yōu)雅的處理校驗的方法步驟,通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 關(guān)于Spring MVC框架中攔截器Interceptor的使用解讀

    關(guān)于Spring MVC框架中攔截器Interceptor的使用解讀

    這篇文章主要介紹了關(guān)于Spring MVC框架中攔截器Interceptor的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 解決java.lang.Error: Unresolved compilation problems:問題

    解決java.lang.Error: Unresolved compilation pro

    這篇文章主要介紹了解決java.lang.Error: Unresolved compilation problems:問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

大厂| 韶山市| 靖州| 山阴县| 岑巩县| 泰来县| 沁阳市| 凭祥市| 申扎县| 鹤庆县| 望都县| 佛坪县| 甘德县| 屏东市| 迁西县| 西林县| 屏南县| 马边| 安平县| 莎车县| 新竹市| 三江| 许昌县| 南京市| 巴塘县| 姜堰市| 广汉市| 巴彦淖尔市| 阿巴嘎旗| 涞水县| 海丰县| 交城县| 星子县| 五家渠市| 平舆县| 南岸区| 南开区| 屏南县| 南丹县| 双桥区| 巴青县|