java集合基礎篇 簡單總結
昨天晚上看了編程思想4的持有對象,所以把學到看到的一些記記背背的方面給總結一下。
java的容器主要分為兩類,一個是實現了接口Collection的一類,還有一個是實現了Map接口的一類。
繼承Collction接口的主要有List、Set接口還有Queue。Collection繼承了Iterator接口,讓實現類可以foreach遍歷。
繼承List接口的主要是ArrayList和LinkedList。
ArrayList的優勢在於隨機訪問,LinkedList的優勢則是更好的插入刪除,另外LinkedList還實現了Queue接口,這讓LinkedList
List的方法(參數不寫):
1、contains() 用來確認List中是不是有某個對象 (還有containsAll() 方法)
2、 add() 添加一個對象 (還有addAll() 方法)
3、 get() 根據傳入的位置獲取一個對象
4、remove() 用來移除List中某個對象 (還有removeAll() 方法)
5、indexOf() 返回某個對象在List中的位置
6、subList() 截取List集合中的一部分並返回
7、sort() 對List集合進行排序
8、retainAll() 計算和傳入的Collection集合的交集,返回boolean,交集結果保存在List中
9 、set() 修改List集合中某個位置上的對象
10、isEmpty() 判斷List集合是不是空
11、clear() 清空List集合
12、 toArray() 根據傳入參數生成一個指定類型的數組,不傳參默認是Object類型數組
13、 size() 計算List集合的長度
註 :以上需要比較的操作,對於傳入的對象,都是使用傳入的對象參數的equals方法和集合中的對象比較
ListIterator
Iterator遍歷一個集合,只能向前遍歷( hasNext(), next() ),而ListIterator可以具備雙向索引,不過ListIterator只能作用於List
LinkedList實現了List的接口,同時又實現了Queue接口
1、getFirst() element() 兩者都是返回列表中的第一個元素,如果是空,拋出異常 NoSuchElementException
2、peek() 返回列表中的第一個元素,如果是空,返回null
3、removeFirst() 刪除列表中的第一個元素,如果是空,拋出異常 NoSuchElementException (空參的remove()方法同樣)
4、poll() 刪除列表中的第一個元素,如果是空,返回null
5、add() addFirst() addLast() 向列表頭(尾)添加元素
6、offer() offerFirst() offerLast() 向列表頭(尾)添加元素
offer和add的區別在於操作一個有容量限制的隊列,前者失敗後返回一個false,後者拋出一個異常
除了隊列之外,LinkedList同樣可以作為Stack棧來使用 (這裏的Stack指的是數據結構,不是java中的Stack類,LinkedList和Stack沒有繼承關系)
7、push() 向頂部添加一個對象
8、pop() 移除一個頂部對象並返回這個對象
不同於List集合,Set集合不同存放重復的元素,Set的接口和Collection接口字段方法一樣,Set集合的實現主要有HashSet、TreeSet、LinkedHashSet。HashSet使用的是散列、TreeSet使用的是紅黑樹的數據結構,LinkedHashSet也用散列,還用鏈表保持位置順序。因此這三種結構的區別就是HashSet擁有最快的查詢速度,有時有序,但不保證一直有序。TreeSet始終處於排序的狀態。LinkedHashSet保持元素的插入順序同時也具有快速的訪問能力。
Collection集合系列還有一個Queue,Queue除了LinkedList的實現之外,還具有一個PriorityQueue的實現。PriorityQueue隊列中可以根據一個彈出隊列優先順序的規則來彈出元素。這個規則需要自己定義,方法是比如PriorityQueue集合中存的是Student類, 定義Student類的時候去實現一個Compareble接口,在一個int類型返回值Object參數的compareTo方法中去自定義規則,把傳入的Object參數(先轉型成Student)和當前Student類的某個字段比較,返回-1說明比當前Student後彈出,返回1先彈出(還有一個0自己體會)
Map接口實現和Set相似,三個實現類HashMap、TreeMap、LinkedHashMap,功能特點也和Set相似。Map和Collection是平行關系,也並沒有繼承Iterator接口,不過Map可以通過keySet()方法將鍵轉化成Set遍歷,或者通過EntrySet()轉化成Entry的Set對象遍歷
java集合基礎篇 簡單總結