JAVA学习之常用集合List,Set,Map
?
常用的集合有List,Set,Map,這三個都是接口,
其中List,和Set繼承于Collection
而Map是一個可以保存鍵值對的接口
Collection接口
Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)。
一些 Collection允許相同的元素而另一些不行。一些能排序而另一些不行。
Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。
所有實現Collection接口的類都必須提供兩個標準的構造函數:無參數的構造函數用于創建一個空的Collection,
有一個 Collection參數的構造函數用于創建一個新的Collection,這個新的Collection與傳入的Collection有相同的元素。
后一個構造函數允許用戶復制一個Collection。
如何遍歷Collection中的每一個元素?不論Collection的實際類型如何,它都支持一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素。典型的用法如下:
Iterator it = collection.iterator(); // 獲得一個迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一個元素
}
由Collection接口派生的兩個接口是List和Set。
List接口,List接口常用的兩個實現類是LinkedList類和ArrayList類
List是有序的Collection,使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數組下標)來訪問List中的元素,這類似于Java的數組。
和下面要提到的Set不同,List允許有相同的元素。
除了具有Collection接口必備的iterator()方法外,List還提供一個listIterator()方法,
返回一個 ListIterator接口,和標準的Iterator接口相比,
ListIterator多了一些add()之類的方法,允許添加,刪除,設定元素, 還能向前或向后遍歷。
LinkedList類
LinkedList實現了List接口,允許null元素。此外LinkedList提供額外的get,remove,insert方法在 LinkedList的首部或尾部。
這些操作使LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque)。
LinkedList類采用鏈表結構保存對象,這種結構的優點是便于向集合中插入和刪除對象,經常需要向集合中插入/刪除對象時,使用此類
效率會比較好,但對于隨機訪問集合中的對象,則會較慢.
ArrayList類
ArrayList實現了可變大小的數組。它允許所有元素,包括null。可以根據索引位置對集合進行快速的隨機訪問,缺點是向指定的索引位置
插入對象或刪除對象的時候速度較慢,size,isEmpty,get,set方法運行時間為常數。
實例化方法如下:
List<String> list=new ArrayList<String>();
總結:基于Array的List適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
Set接口
Set是一種不包含重復的元素的Collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素。
很明顯,Set的構造函數有一個約束條件,傳入的Collection參數不能包含重復的元素。
Set接口常用的實現類有HashSet和TreeSet.
實例化方法如下:
Set<String> set1=new HashSet<String>();
Set<String> set2=new TreeSet<String>();
Set 集合中的元素是不能重復的,而且是無序的,遍歷Set集合元素的時候,有可能與插入Set元素時候的順序并不一樣
遍歷Set集合的方法時,可以用For循環,
或者用Collection接口的iterator()方法取得迭代器來遍歷
Map接口
請注意,Map沒有繼承Collection接口,Map提供key到value的映射。
一個Map中不能包含相同的key,每個key只能映射一個 value。
Map接口提供3種集合的視圖,Map的內容可以被當作一組key集合,一組value集合,或者一組key-value映射。
即Map接口遍歷的時候常用到的三個方法:
entrySet()
返回 Set<Map.Entry<K,V>>此映射中包含的映射關系的 Set 視圖。
keySet()
返回Set<K> 此映射中包含的鍵的 Set 視圖。
values()
返回Collection<V>此映射中包含的值的 Collection 視圖。
Map接口常用的實現類有HashMap和TreeMap.通常建議使用HashMap,因為HashMap類實現的對于添加和刪除的行為
效率更高.HashMap是基于哈希表的Map接口的實現.
而TreeMap中的映射存在一定的順序,如果希望Map集合中的對象存在一定的順序,那就使用TreeMap類
HashMap允許使用Null值和Null的元素,但是要求鍵的唯一性,此類不保證集合的順序,特別是不保證該順序恒久不變
TreeMap類不僅實現的Map接口,還實現了SortedMap接口,因此該類的集合中具有一定的順序.但是在添加.刪除和定位的時候,
性能會比HashMap類差一些.由于TreeMap類實現的Map集合中的映射關系是根據鍵對象按照一定的順序排序的.因為不允許鍵的對象是Null
實現的應用中,可以通過HashMap類創建Map集合,當需要順序輸出的時候,再創建一個鍵值對相同的映射關系的TreeMap類,然后輸出
練習代碼示例:
import java.util.*; class test { public static void main(String[] args){ List<String> d=new LinkedList<String>(); d.add("aaa"); d.add("bbb"); d.add("ccc"); d.add("ddd"); d.add("eee"); Set<String> set=new HashSet<String>(); set.add("1"); set.add("1"); set.add("1"); set.add("1"); set.addAll(d); set.add("2"); Set<String> intset=new TreeSet<String>(); intset.add("1"); intset.add("2"); intset.add("3"); intset.add("4"); intset.add("5"); intset.add("6"); Iterator<String> i=intset.iterator(); while(i.hasNext()) { System.out.println(i.next()); } Map<String,String> map=new HashMap<String,String>(); map.put("1","11"); map.put("2","22"); map.put("3","33"); map.put("4","44"); for(int l=1;l<map.size();l++){ System.out.println(map.get(""+l+"")+""); } Collection<String> vv=map.values(); Iterator<String> vvi=vv.iterator(); while(vvi.hasNext()){ System.out.println(vvi.next()); } Set<String> keySet=map.keySet(); vvi=keySet.iterator(); while(vvi.hasNext()){ System.out.println(map.get(vvi.next())); } } }平時集合使用的比較多,熟悉集合類,有時會意想不到的效果哦.
?
轉載于:https://www.cnblogs.com/fylx/p/3961530.html
總結
以上是生活随笔為你收集整理的JAVA学习之常用集合List,Set,Map的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上证市盈率在哪里查
- 下一篇: 微众易贷申请条件 申请门槛较高