java 类集合_java集合类详解
一、集合類與數(shù)組的區(qū)別
1.集合的長度可變,數(shù)組的長度固定;
2.集合用來存放對(duì)象引用,數(shù)組用來存放基本類型的數(shù)據(jù);
二、集合類的關(guān)系
1.Collection接口
存儲(chǔ)一組不唯一、無序的對(duì)象。
2.List接口
存儲(chǔ)一組不唯一、有序(插入順序)的對(duì)象。
2.1 實(shí)現(xiàn)類:ArrayList類、LinkedList類
ArrayList類:實(shí)現(xiàn)長度可變的數(shù)組,在內(nèi)存中分配連續(xù)的空間,遍歷元素和隨機(jī)訪問元素的效率較高。
add()? addAll()? clear()? size()? iterator()? get()? set()
LinkedList類:采用鏈表存儲(chǔ)方式,插入、刪除元素時(shí)效率較高。
add()? addAll()? addFirst()? addLast()? clear()? remove()? size()? iterator()? get()? set()
3.Set接口
存儲(chǔ)一組唯一、無序的對(duì)象。
唯一性:在添加對(duì)象時(shí),會(huì)先采用對(duì)象的equals()方法與當(dāng)前已有的對(duì)象的HashCode進(jìn)行比較(重寫了equals()方法的除外),如果沒有相同的對(duì)象,則添加新的對(duì)象。
無序性:沒有g(shù)et()方法,無法通過下標(biāo)遍歷Set集合。
遍歷set集合方法:
3.1 通過迭代器Iterator
public static voidmain(String[] args){
Set set= newHashSet();
set.add("c");
set.add("a");
set.add("c");
set.add("b");
Iterator it =set.iterator();while(it.hasNext()) {
String str=(String) it.next();
System.out.print(str + " ");
}
}
輸出結(jié)果:a b c
3.2 增強(qiáng)型for循環(huán)
public static voidmain(String[] args) {
Set set = new HashSet();
set.add("c");
set.add("a");
set.add("c");
set.add("b");for(Object obj : set) {
String str=(String) obj;
System.out.println(str);
}
}
輸出結(jié)果:a b c
4.Map接口
存儲(chǔ)一組鍵值對(duì)象,提供key到value的映射。
輸出所有的key值:keySet()方法,返回鍵的Set視圖;
輸出所有的values值:values()方法,返回值的Collection視圖;
獲得所有的鍵值對(duì):entrySet()方法,返回鍵值對(duì)的Set視圖。
public static voidmain(String[] args) {
Map map = new HashMap<>();
map.put("java", "課堂學(xué)習(xí)");
map.put("Html", "視頻學(xué)習(xí)");//獲得所有鍵值對(duì)的集合
Set> entrySet =map.entrySet(); // 集合中對(duì)象的類型為Map.Entry
// 方法一:通過增強(qiáng)型for循環(huán)for(Map.Entry entry : entrySet) {
String key=entry.getKey().toString();
String value=entry.getValue().toString();
System.out.println(key+ "---" +value);
}
// 方法二:通過迭代器Iterator
Iterator> it1;
it1 = entrySet.iterator();
while(it1.hasNext()){
Map.Entry me = it1.next();
String key1 = me.getKey();String value1 = me.getValues();
System.out.println(key1 + "---" + value1);
}Iteratorit;
System.out.println("key值:");//獲得所有鍵的集合
Set set =map.keySet(); // 集合中對(duì)象的類型為String
it=set.iterator();while(it.hasNext()) {
System.out.print(it.next()+ "\t");
}
System.out.println("\nvalues值:");//獲得所有值的集合
Collection coll =map.values(); // 集合中對(duì)象的類型為String
it=coll.iterator();while(it.hasNext()) {
System.out.print(it.next()+ "\t");
}}
4.1 實(shí)現(xiàn)類
HashMap、Hashtable、LinkedHashMap和TreeMap
HashMap
HashMap是最常用的Map,它根據(jù)鍵的HashCode值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時(shí),取得數(shù)據(jù)的順序是完全隨機(jī)的。因?yàn)殒I對(duì)象不可以重復(fù),所以HashMap最多只允許一條記錄的鍵為Null,允許多條記錄的值為Null,是非同步的。
Hashtable
Hashtable與HashMap類似,是HashMap的線程安全版,它支持線程的同步,即任一時(shí)刻只有一個(gè)線程能寫Hashtable,因此也導(dǎo)致了Hashtale在寫入時(shí)會(huì)比較慢,它繼承自Dictionary類,不同的是它不允許記錄的鍵或者值為null,同時(shí)效率較低。
ConcurrentHashMap
線程安全,并且鎖分離。ConcurrentHashMap內(nèi)部使用段(Segment)來表示這些不同的部分,每個(gè)段其實(shí)就是一個(gè)小的HashTable,它們有自己的鎖。只要多個(gè)修改操作發(fā)生在不同的段上,它們就可以并發(fā)進(jìn)行。
LinkedHashMap
LinkedHashMap保存了記錄的插入順序,在用Iteraor遍歷LinkedHashMap時(shí),先得到的記錄肯定是先插入的,在遍歷的時(shí)候會(huì)比HashMap慢,有HashMap的全部特性。
TreeMap
TreeMap實(shí)現(xiàn)SortMap接口,能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按鍵值的升序排序(自然順序),也可以指定排序的比較器,當(dāng)用Iterator遍歷TreeMap時(shí),得到的記錄是排過序的。不允許key值為空,非同步的。
總結(jié)
以上是生活随笔為你收集整理的java 类集合_java集合类详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rpm mysql 忘记密码_mysql
- 下一篇: 正态分布概率表_三、统计概率思维