Java中的數據結構類別包括數組、鏈表、隊列、棧、樹等等,但是在使用這些數據結構時,需要我們自己實現一些操作,例如查找、插入、刪除等等。為了方便使用,Java中提供了許多內置的集合類,可以幫助我們輕鬆地使用這些數據結構。
一、列表(List)
List是Java中最基本常用的集合類之一,它用於存儲一組有序的元素。它有序、可以放重複元素,提供了一系列按索引位置訪問元素、查找元素等方法,常見的實現類有ArrayList和LinkedList。
1. ArrayList
ArrayList是一個動態數組,當數組滿了時,會自動擴充容量,所以它適用於那些需要插入和刪除元素較少但需要隨機訪問元素的場合::
//創建ArrayList ArrayList<String> list = new ArrayList<>(); //添加元素 list.add("a"); list.add("b"); list.add("c"); //查找元素 String s1 = list.get(1); //b //刪除元素 list.remove(0);
2. LinkedList
LinkedList是一個雙向鏈表,它適用於那些需要頻繁插入和刪除元素但不需要隨機訪問元素的場合:
//創建LinkedList LinkedList<String> list = new LinkedList<>(); //添加元素 list.add("a"); list.add("b"); list.add("c"); //查找元素 String s1 = list.get(1); //b //刪除元素 list.remove(0);
二、集合(Set)
Set集合是一種不允許重複元素的(Collections和Arrays集合都可以有重複元素),適合於不需要元素按任何順序排列的使用場合。
1. HashSet
HashSet是最常用的一個Set實現類,基於HashMap實現,底層使用HashMap存儲數據。它不保證元素的順序,也不允許包含重複元素。
//創建HashSet HashSet<String> set = new HashSet<>(); //添加元素 set.add("a"); set.add("b"); set.add("c"); set.add("a"); //重複元素 //查找元素 boolean b1 = set.contains("a"); //刪除元素 set.remove("b");
2. TreeSet
TreeSet是基於TreeMap實現的,它提供有序的集合和排序功能,默認是自然排序。它不允許重複元素。
//創建TreeSet TreeSet<String> set = new TreeSet<>(); //添加元素 set.add("c"); set.add("b"); set.add("a"); //查找元素 String s1 = set.first(); //a String s2 = set.last(); //c //刪除元素 set.remove("b");
三、映射(Map)
Map用於存儲鍵值對,可以根據鍵快速訪問相應的值。Java中的Map有多種實現方式,如HashMap、TreeMap等等。
1. HashMap
HashMap是使用哈希表實現,可以以O(1)時間複雜度訪問元素,而鍵值對的存儲順序是無序的。它不允許重複的鍵,但是允許多個鍵對應的值相同。
//創建HashMap HashMap<String, Integer> map = new HashMap<>(); //添加鍵值對 map.put("Tom", 20); map.put("Mike", 19); map.put("Lucy", 18); //查找值 Integer age = map.get("Tom"); //20 //刪除鍵值對 map.remove("Mike");
2. TreeMap
TreeMap是使用紅黑樹實現的,按照鍵排列,默認是按照自然序排列,鍵必須實現Comparable介面或在創建時提供一個Comparator實例。
//創建TreeMap TreeMap<String, Integer> map = new TreeMap<>(); //添加鍵值對 map.put("Tom", 20); map.put("Mike", 19); map.put("Lucy", 18); //查找值 Integer age = map.get("Tom"); //20 //刪除鍵值對 map.remove("Mike");
四、隊列(Queue)
隊列是一種先進先出(FIFO)的數據結構,尾部插入元素,頭部彈出元素。
1. LinkedList
LinkedList不僅是List,同時也是Queue,其實它是一種雙向隊列 Double Ended Queue。
//創建隊列 Queue<Integer> queue = new LinkedList<>(); //入隊 queue.offer(1); queue.offer(2); queue.offer(3); //出隊 int i = queue.poll(); //1
2. PriorityQueue
優先隊列是使用堆(heap)實現,每次操作的時間複雜度為O(logn),隊頭元素是當前堆中權值最小的元素(默認是自然序)。
//創建優先隊列 PriorityQueue<Integer> queue = new PriorityQueue<>(); //入隊 queue.offer(2); queue.offer(1); queue.offer(3); //出隊 int i = queue.poll(); //1
五、總結
本文主要介紹了Java中常用的集合類,包括List、Set、Map、Queue等。每種集合類都有其適用場景和特點,使用不同的集合類可以使我們的程序更加高效、簡潔和易於維護。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245591.html