一、簡介

1. 集合框架的核心組件
(1)核心接口
- Collection 接口(頂級接口,List 和 Set 繼承自它)
- List(列表):有序,可重復(如 ArrayList、LinkedList)
- Set(集合):無序,元素唯一(如 HashSet、TreeSet)
- Queue(隊列):按特定順序處理元素(如 LinkedList、PriorityQueue)
- Map(映射):鍵值對存儲,不允許鍵重復(如 HashMap、TreeMap)
(2)主要實現類
接口 | 主要實現類 | 特點 |
List | ArrayList 、 LinkedList 、 Vector | 有序,可重復 |
Set | HashSet 、 LinkedHashSet 、 TreeSet | 無序(或排序),不重復 |
Queue | PriorityQueue 、 ArrayDeque | 先進先出(FIFO)或優先級處理 |
Map | HashMap 、 LinkedHashMap 、 TreeMap | 鍵值對存儲,不允許鍵重復 |
@Test
public void test1() {//數組最大問題是長度固定,而且要操作下標Student[] array = new Student[3];ArrayList<Student> list = new ArrayList<>();Student student1 = new Student();Student student2 = new Student();Student student3 = new Student();Student student4 = new Student();list.add(student1);list.add(student2);list.add(student3);list.add(student4);list.add(student1);//有序可重復//有序:你放進去的順序和拿出來的順序一致//ArrayList<String> list1 = new ArrayList<>();List<String> list1 = new ArrayList<>();list1.add("Java");list1.add("UI");list1.add("H5");list1.add("H5");list1.add("aa");for (String str : list1) {System.out.println(str);}System.out.println("-------------------");//無序不重復//無序:放進去順序和拿出來的順序可能是不一致的//HashSet<String> set = new HashSet<String>();Set<String> set = new HashSet<>();set.add("Java");set.add("UI");set.add("H5");set.add("H5");set.add("aa");for (String str : set) {System.out.println(str);}
}
注意:
jdk1.7版本之前創建集合對象必須把前后的泛型都寫上
ArrayList list = new ArrayList();
jdk1.7版本之后,=號后面的泛型可以省略,后面的泛型可以根據前面的泛型推導出來
ArrayList list = new ArrayList<>();
?
二、ArrayList和LinkedList區別
隊列
?
LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();
ArrayList和LinkedList的大致區別如下:
- ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。
- 對于隨機訪問get和set,ArrayList覺得優于LinkedList,因為LinkedList要移動指針。
- 對于新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。
?
ArrayList內部是使用可増長數組實現的,所以是用get和set方法是花費常數時間的,但是如果插入元素和刪除元素,
除非插入和刪除的位置都在表末尾,否則代碼開銷會很大,因為里面需要數組的移動。
LinkedList是使用雙鏈表實現的,所以get會非常消耗資源,除非位置離頭部很近。但是插入和刪除元素花費常數時間。
三、隊列
Queue先進先出 FIFO Firt In First Out
客服電話、12306排隊買票、滴滴打車
LinkedList linkedList = new LinkedList();
linkedList.addLast("A");
linkedList.addLast("B");
linkedList.addLast("C");
linkedList.removeFirst();
?
四、Map
1、Map
Map key,value
Set> set = map.entrySet();
map.keySet();
Map接口
1、Collection中的集合,元素是孤立存在的(理解為單身),向集合中存儲元素采用一個個元素的方式存儲。
2、Map中的集合,元素是成對存在的(理解為夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。
3、Collection中的集合稱為單列集合,Map中的集合稱為雙列集合。
4、需要注意的是,Map中的集合不能包含重復的鍵,值可以重復;每個鍵只能對應一個值。
5、Map中常用的集合為HashMap集合、LinkedHashMap集合。
Map接口中的常用方法
?
public static void main(String[] args) {// 創建Map對象Map<String, String> map = new HashMap<String, String>();// 給map中添加元素map.put("星期一", "Monday");map.put("星期日", "Sunday");System.out.println(map); // {星期日=Sunday, 星期一=Monday}// 根據指定的key獲取對應的valueString en = map.get("星期日");System.out.println(en); // Sunday// 根據key刪除元素,會返回key對應的value值String value = map.remove("星期日");System.out.println(value); // SundaySystem.out.println(map); // {星期一=Monday}
}
2、Map集合遍歷鍵找值方式:
1、keySet
鍵找值方式:即通過元素中的鍵,獲取鍵所對應的值
1.獲取Map集合中所有的鍵,由于鍵是唯一的,所以返回一個Set集合存儲所有的鍵
2.遍歷鍵的Set集合,得到每一個鍵
3.根據鍵,獲取鍵所對應的值
?
?
public void test1() {// 創建Map對象Map<String, String> map = new HashMap<String, String>();// 給map中添加元素map.put("鄧超", "孫儷");map.put("李晨", "范冰冰");map.put("劉德華", "柳巖");// 獲取Map中的所有keySet<String> keySet = map.keySet();// 遍歷存放所有key的Set集合Iterator<String> it = keySet.iterator();while (it.hasNext()) {// 得到每一個keyString key = it.next();// 通過key獲取對應的valueString value = map.get(key);System.out.println(key + "=" + value);}
}
2、entrySet
Map集合遍歷鍵值對方式
鍵值對方式:即通過集合中每個鍵值對(Entry)對象,獲取鍵值對(Entry)對象中的鍵與值。
操作步驟與圖解:
1.獲取Map集合中,所有的鍵值對(Entry)對象,以Set集合形式返回。
2.遍歷包含鍵值對(Entry)對象的Set集合,得到每一個鍵值對(Entry)對象
3.通過鍵值對(Entry)對象,獲取Entry對象中的鍵與值。
?
?
?注意:Map集合不能直接使用迭代器或者foreach進行遍歷。但是轉成Set之后就可以使用了↓
@Test
public void test1() {Map<String, String> map = new HashMap<>();map.put("cn", "中國");map.put("us", "美國");map.put("uk", "英國");Set<Map.Entry<String, String>> entrySet = map.entrySet();for (Map.Entry<String, String> entry : entrySet) {System.out.println(entry.getKey() + " : " + entry.getValue());}System.out.println("-----------");String country = map.get("cn");System.out.println(country);System.out.println("-----------");Set<String> keySet = map.keySet();for (String key : keySet) {System.out.println(key + " : " + map.get(key));}
}@Test
public void test2() {// 創建Map對象Map<String, String> map = new HashMap<String, String>();// 給map中添加元素map.put("鄧超", "孫儷");map.put("李晨", "范冰冰");map.put("劉德華", "柳巖");// 獲取Map中的所有key與value的對應關系Set<Map.Entry<String, String>> entrySet = map.entrySet();// 遍歷Set集合Iterator<Map.Entry<String, String>> it = entrySet.iterator();while (it.hasNext()) {// 得到每一對對應關系Map.Entry<String, String> entry = it.next();// 通過每一對對應關系獲取對應的keyString key = entry.getKey();// 通過每一對對應關系獲取對應的valueString value = entry.getValue();System.out.println(key + "=" + value);}
}
?