您好,登錄后才能下訂單哦!
這篇文章給大家介紹數據類型中的Collection與Map是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Collection 接口類型1 List:有序(存入和取出的順序一致),元素都有索引(角標),元素可以重復。 接口類型2 Set:元素不能重復,默認不能保證順序,提供有順序實現。 接口類型3 Queue:線性表隊列,有序,先進先出數據結構。 |--AbstractCollection:實現了Collection接口,不能創建實例,需要使用它的子實現類 |--AbstractList:實現了List接口,有序,抽象類,功能強大 |--ArrayList:內部是數組數據結構,是不同步(非線程安全)的。替代了Vector。查詢的速度快 |--LinkedList:內部是鏈表數據結構,是不同步的。增刪元素的速度很快 |--Vector:內部是數組數據結構,是同步的。增刪,查詢都很慢,已不推薦 |--Stack:棧,先進后出,已不推薦 |--AbstractQueue:實現了Queue接口,有序,迭代順序可以自然排序或者在自定義類中實現"Comparable"接口重寫Comparator方法進行排序。 當隊列中元素為null時,拋出異常,而不是返回false或null 字類必須定義offer()方法,該方法不允許插入null值。依靠自然順序的優先級隊列還不允許插入不可比較的對象 |--PriorityQueue:優先權隊列,每次從隊列中取出的應是具有最高優先權的元素 能夠自動排序的隊列,存儲的元素排列并不是按照元素添加的順序,而是內部會按元素的大小順序進行排列 |---------|--ArrayDeque:實現了Deque(雙端隊列,Queue的子接口),有序,非線程安全,推薦當作棧或隊列使用。不允許放入null元素 添加,刪除,取值都有兩套接口,它們功能相同,區別是對失敗情況的處理不同。 一套接口遇到失敗就會拋出異常,另一套遇到失敗會返回特殊值(false或null)。 |--AbstractSet:實現了Set接口,無序,覆蓋了 equals() 和 hashCode() 方法 |--TreeSet:實現了NavigableSet(SortSet子接口(Set子子接口))可導航接口, 基于TreeMap來實現,有序,可以自然排序或者在自定義類中實現"Comparable"接口重寫Comparator方法進行排序。 |--HashSet:實現了Set接口,無序,采用hash算法 操作元素前,會先調用元素身上的hashcode方法,如果散列碼發生碰撞,會觸發equlas方法用于判定是否為同意個對象 JDK規定:如果兩個對象相等,他們的hashcode值必然相等,如果兩個對象的hashcode值相等,對象不一定相等 |--LinkedHashSet:雙向鏈表結構,非線程安全,基于LinkedHashMap來實現,有序,序列順序為插入順序 list集合是可以完成對元素的增刪改查。 List:特有的常見方法:有一個共性特點就是都可以操作角標。 1,添加 void add(index,element); void add(index,collection); 2,刪除; Object remove(index): 3,修改: Object set(index,element); 4,獲取: Object get(index); int indexOf(object); int lastIndexOf(object); List subList(from,to);
LinkedList和ArrayList的區別: LinkedList采用雙向鏈表,如果需要對該種數據結構(集合)進行增刪操作,使用LinkedList效率更高 ArrayList是實現了基于動態數組的數據結構,而LinkedList是基于雙向鏈表的數據結構 對于隨機訪問的get和set,ArrayList要優于LinkedList,因為LinkedList基于指針的移動。 ArrayList想要get(int index)元素時,直接返回index位置上的元素, 而LinkedList需要通過for循環進行查找, 雖然LinkedList已經在查找方法上做了優化,比如index < size / 2,則從左邊開始查找, 反之從右邊開始查找,但是還是比ArrayList要慢。這點是毋庸置疑的。 ArrayList想要在指定位置插入或刪除元素時,主要耗時的是System.arraycopy動作,會移動index后面所有的元素; LinkedList主耗時的是要先通過for循環找到index,然后直接插入或刪除。
Set存放不重復元素,默認不能保證順序,提供有順序 /--HashSet:采用hash算法,無序 操作元素前,會先調用元素身上的hashcode方法,如果散列碼發生碰撞,會觸發equlas方法用于判定是否為同意個對象 JDK規定:如果兩個對象相等,他們的hashcode值必然相等,如果兩個對象的hashcode值相等,對象不一定相等 /--LinkedHashSet:采用hash算法,有序 /--TreeSet: 采用Tree算法,有序
Map:<key,value>:映射類,key-->value,接口,與collection對應 |--AbstractMap:實現了Map接口 |--HashMap:無序,非安全的,但collection框架提供方法能保證HashMap synchronized |--LinkedHahMap:有序,非安全的,迭代順序可以是插入順序或者是訪問順序 |--HashTable:無序,安全的,幾乎等效于HashTable,但線程安全還要考慮到性能問題,應該采用ConcurrentHashMap |--TreeMap:有序,同一key值默認為同一對象,迭代順序可以自然排序或者在自定義類中實現"Comparable"接口重寫Comparator方法進行排序 |--EnumMap:枚舉映射,()內為枚舉類,有序,迭代順序為枚舉順序 |--IdentityHashMap:不是Map的通用實現,允許存放相同key值,僅當兩key值地址一樣是才認為相等無序,非安全的,允許key和value都為null
ashTable和HashMap的區別:HasnMap幾乎完全等效HashTable HashTable線程安全,所有的操作是線程同步的,不需要線程同步的情況下使用HashMap, 如果高并發情況下,線程安全還要考慮到性能問題,應該采用ConcurrentHashMap。 HashMap非線程安全,HashMap允許存放null的value,允許存在null的key HashTable 允許存放null的value,不允許存在null的key 迭代操作:HashMap快速失敗,HashTable安全失敗
關于數據類型中的Collection與Map是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。