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