Java集合框架02

2021-09-24 17:19:33 字數 4482 閱讀 8739

map是和collection同級 的容器

map放置 元素是以:key-value的結構存在

重點掌握hasmap hashtable

1.hasmap

*	hashmap 底層結構:陣列+單項鍊表結構,陣列中主要存放鍵的hash值,

* 而鍊錶中主要儲存k-v結構的資料

* * 在向hashmap加資料的時候:

* 先比較hash值,看hash是否在hash表中存在

* 存在

* 比較key值是否相同,

* 不同直接新增新的資料

* 相同替換value值

* 不存在

* 直接新增新的資料

* * 陣列構成了hashmap中的hash表,預設大小16 可以存放16*0.75個

* 超過這個資料,hash將會重建自動擴容 並陣列擴大2倍

**示例:

hashmapmap = new hashmap();

map.put("9527", new personbean("張三"));

map.put("9528", new dogbean("來福"));

//map中可以存放null

map.put(null, null);

//鍵值不會一樣 再次新增乙個同樣的鍵 將替換原先value中的值

map.put("9527", new personbean("打包"));

//獲取map中的value

system.out.println(map.get("9527"));

/** 我們自定義物件,在作為key的時候一般都需要重寫hashcode()

* 其目的在與做到hashmap中去重

*///hashmap中的鍵,還可以放我們自定義的物件

map.put(new personbean("1號", "9527", 1), "它的名字11");

map.put(new personbean("2號", "9527", 1), "它的名字112");

//獲取map中所有的鍵 並返回乙個set物件

system.out.println(map.keyset());

//獲取map中的所有k-v 並返回set>

system.out.println(map.entryset());

//判斷在hashmap中是否存在這個鍵

system.out.println(map.containskey("9527"));

/** 在hashmap查詢鍵是否存在,

* 找到返回對應value值

* 沒找到返回乙個預設值 例如下:123456

* */

system.out.println(map.getordefault("111",123456));

//移除某個鍵-值

map.remove("9527");

system.out.println(map.containsvalue("9527"));

2.hashtable
* hashtable 和 hashmap 底層一樣,區別在於hashtable是執行緒安全的

* hashmap 可以存放空值空鍵

* hashtable 不可以存放空值空鍵

**示例:

hashtableht = new hashtable();

// ht.put(null, null); //nullpointerexception

queeue是map和collection同級 的容器

* queue佇列 也是可以存放東西的容器

* * 它存放的方式:先進先出 類似於排隊

* * 佇列應用場景:

* 1.多執行緒之間資料互動

* 2.多系統之間資料互動

**示例:

queuequeue = new arrayblockingqueue(5);

queue.add(1);

queue.add(2);

queue.add(3);

queue.add(4);

queue.add(5);

// queue.add(12);//illegalstateexception: queue full

//獲取佇列中的元素格式

system.out.println(queue.size());

//遍歷 for foreach 迭代器

for (object object : queue)

while(true)

//讀取佇列第乙個並刪除

system.out.println(queue.poll());

}

自然排序:

凡是實現comparable介面 的排序 都稱為自然排序

listdatas = new arraylist();

datas.add(10);

datas.add(25);

datas.add(3);

datas.add(4);

datas.add(99);

system.out.println(arrays.tostring(datas.toarray()));

//指定交換位置

collections.swap(datas, 0, 2);

system.out.println(arrays.tostring(datas.toarray()));

//string... === string

// collections.addall(datas,"j");

system.out.println(arrays.tostring(datas.toarray()));

//取出最大值

system.out.println(collections.max(datas));

//預設按照公升序排列

collections.sort(datas);

system.out.println(arrays.tostring(datas.toarray()));

//降序排列

//集合反轉

collections.reverse(datas);

system.out.println(arrays.tostring(datas.toarray()));

自定義排序:

* 自己去寫排序規則

* 自定義排序和自然排序的區別:

* 自然排序需要集合中的元素實現comparable,並重寫方法comparto()

* * 自定義排序不需要集合中的元素實現comparable

* * 比較器需要實現comparator介面,並重寫compare();

**示例:

listdatas = new arraylist();

datas.add(10);

datas.add(25);

datas.add(3);

datas.add(4);

datas.add(99);

system.out.println(arrays.tostring(datas.toarray()));

//自定義降序

collections.sort(datas,new comparator() else if(o1 -o2 < 0) else

}});

system.out.println(arrays.tostring(datas.toarray()));

**示例:

integer arr = ;

//陣列複製

integer arr01 = arrays.copyof(arr, arr.length);

integer arr02 = arrays.copyofrange(arr, 0, 1);

system.out.println(arrays.deeptostring(arr));

system.out.println(arrays.tostring(arr));

arrays.spliterator(arr).foreachremaining(new consumer()

});//陣列和list互相轉換

listdatas = arrays.aslist(arr);

collections.reverse(datas);

system.out.println(arrays.tostring(datas.toarray()));

通常和***.properties 檔案結合起來使用

**示例:

properties p = new properties();

p.put("9524",11);

java集合框架

集合框架包括集合與對映 collection and map 以及它們的子類 容器類 1 list 元素有先後次序的集合,元素有index位置,元素可以重複,繼承自collection介面,實現類 arraylist,vector,linkedlist 2 set 元素無續,不能重複新增,是數學意義...

java集合框架

框架 為了解決某一特定的問題,預先設計好的一系列具有繼承或實現關係的類的介面。集合裡的三大類 list直接繼承collection 特點 線性,有序 arraylist底層的實現是陣列 使用範圍 當某一陣列在實際應用中大量使用查詢和新增功能的時候用arraylist linkedlist底層的實現是...

java 集合框架

集合一般使用list,set,map首先說下list 1.list一般使用arraylist,linkedlist list的特點有序,重複,那麼arraylist和linkedlist的區別 arraylist插入和刪除資料慢,取值速度快,實際上arraylist是陣列的擴充 linkedlist...