java 类 大全_JAVA集合类汇总
縮略圖如下圖所示:圖中,實線邊框的是實現類,折線邊框的是抽象類,而點線邊框的是接口
在JAVA的util包中有兩個所有集合的父接口Collection和Map,它們的父子關系:
set --其中的值不允許重復,無序的數據結構
list?? --其中的值允許重復,因為其為有序的數據結構
map--成對的數據結構,健值必須具有唯一性(鍵不能同,否則值替換)
│├ ArreyList ? ? (Class 數組,隨機訪問,沒有同步,線程不安全)
│├ Vector ? ? ? ?(Class ?數組 ? ? ? ? ? ? ? ? ? 同步 ? ? ? ?線程安全)
│├ LinkedList ? ?(Class ?鏈表 ? 插入刪除 ? 沒有同步 ? 線程不安全底層是由鏈表實現的)
│└ Stack ? ? ? ? ?(Class)
└+Set(接口 不能含重復的元素。僅接收一次并做內部排序,集)
│├ HashSet ? ? ? ? ? ?(Class)
│├ LinkedHashSet ? (Class)
│└ TreeSet? ? ? ?(Class)
+Map(接口)
├ +Map(接口 映射集合)
│ ├ HashMap ? ? ? ? ? ?(Class 不同步,線程不安全。除了不同和允許使用null 鍵值之外,與Hashtable大致相同)
│ ├ Hashtable ? ? ? ? ? (Class 同步 ? ,線程安全 ? ?。不允許實施null 鍵值)
│ ├ +SortedMap 接口
│ │? ?├ TreeMap? ? ? ? ?(Class)
│?├ WeakHashMap ? ? (Class)
ArrayList , Vector , LinkedList 是 List 的實現類
Vector是線程安全的,效率肯定沒有ArrayList高了。實際中一般也不怎么用Vector,可以自己做線程同步,也可以用Collections配合ArrayList實現線程同步。
前面多次提到擴容的代價很高,所以如果能確定容量的大致范圍就可以在創建實例的時候指定,注意,這個僅限于ArrayList和Vector喲:
ArrayList arrayList = new ArrayList(100);
arrayList.ensureCapacity(200);
Vector vector = new Vector(100);
vector.ensureCapacity(200);
a.排序
List的排序的話就是使用Collections的sort方法,構造Comparator或者讓List中的對象實現Comparaable都可以,這里就不貼代碼了。
b.去重
第一種:用Iterator遍歷,遍歷出來的放到一個臨時List中,放之前用contains判斷一下。
第二種:利用set的不可重復性,只需三步走。
//第一步:用HashSet的特性去重
HashSet tempSet = new HashSet(arrayList);
//第二步:將arrayList清除
tempSet.clear();
//第三步:將去重后的重新賦給List
arrayList.addAll(tempSet);
Stack
Stack呢,是繼承自Vector的,所以用法啊,線程安全什么的跟Vector都差不多,只是有幾個地方需要注意:
第一:add()和push(),stack是將最后一個element作為棧頂的,所以這兩個方法對stack而言是沒什么區別的,但是,它們的返回值不一樣,add()返回boolean,就是添加成功了沒有;push()返回的是你添加的元素。為了可讀性以及將它跟棧有一丟丟聯系,推薦使用push。
第二:peek()和pop(),這兩個方法都能得到棧頂元素,區別是peek()只是讀取,對原棧沒有什么影響;pop(),從字面上就能理解,出棧,所以原棧的棧頂元素就沒了。
HashSet和TreeSet
Set集合類的特點就是可以去重,它們的內部實現都是基于Map的,用的是Map的key,所以知道為什么可以去重復了吧。
既然要去重,那么久需要比較,既然要比較,那么久需要了解怎么比較的,不然它將1等于2了,你怎么辦?
比較是基于hascode()方法和equals()方法的,所以必要情況下需要重新這兩個方法。
HashMap效率高于HashTable。
多線程環境下,通常也不是用HashTable,因為效率低。HashMap配合Collections工具類使用實現線程安全。同時還有ConcurrentHashMap可以選擇,該類的線程安全是通過Lock的方式實現的,所以效率高于Hashtable。
總結
以上是生活随笔為你收集整理的java 类 大全_JAVA集合类汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java内存 phd文件抓取_您可以从I
- 下一篇: 大白菜优盘下载怎么安装 大白菜优盘下载安