Java集合概念及List和Map遍歷

最近看了很多關於Java集合的概念和使用,在這裏做個總結。

先放上之前在慕課網看視頻學習的一張圖,我們最常使用的是ArrayList和HashMap。


1、ArrayList和ListedList的區別和聯繫(這是很多面試官會問到的一題)

ArrayList數組線性表的特點爲:類似數組的形式進行存儲,因此它的隨機訪問速度極快。

ArrayList數組線性表的缺點爲:不適合於在線性表中間需要頻繁插入和刪除操作,因此每次插入和刪除都需要移動數組中的元素。

LinkedList的鏈式線性表的特點爲:適合於在鏈表中間需要頻繁進行插入和刪除操作。

LinkedList數組線性表的缺點爲:隨機訪問速度較慢。查找一個元素需要從頭開始一個一個的找,速度比較慢。

ArrayList和LinkedList都是線程不安全的。

2、線程安全類(線程安全的類其方法是同步的,每次只能一個訪問。是重量級對象,效率較低):

Vector:比ArrayList多了個同步化機制(線程安全),因爲效率較低,現在已經不太建議使用。在web應用中,特別是前臺頁面,往往效率(頁面響應速率)是優先考慮的。

stack:堆棧類,先進後出

hashtable:就比hashmap多個線程安全,hashtable不允許插入空值,hashmap允許

enumeration:枚舉,相當於迭代器

StringBuffer是線程安全,而StringBuilder是線程不安全。

3、List排序

Collections.sort(numList);

無參Sort()方法是使用Comparer.Default比較器來排序的。對於對象Student類,可以實現IComparable接口compareTo方法

public int compareTo(User o) {  
        int i = this.getAge() - o.getAge();//先按照年齡排序  
        if(i == 0){  
            return this.score - o.getScore();//如果年齡相等了再用分數進行排序  
        }  
        return i;  

}

4、List集合
List list = new ArrayList();
(1)第一種遍歷方式:for遍歷
for(Object li : list){
System.out.println(li.toString);
}
(2)第二種遍歷方式:ListIterator迭代遍歷
ListIterator<String> it = list.listIterator();
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}  

5、Map集合
Map<Integer,String> map = new HashMap<Integer,String>();
//第一種:通過Map.keySet遍歷key和value
for(Integer in:map.keySet()){
//map.keySet()返回的是所有key的值
String str = map.get(in);//得到每個key多對用value的值
}

//第二種:通過Map.entrySet遍歷key和value
for (Map.Entry<Integer, String> entry : map.entrySet()) {
//Map.entry<Integer,String> 映射項(鍵-值對)  有幾個方法
//entry.getKey() ;entry.getValue(); entry.setValue();            
  //map.entrySet()  返回此映射中包含的映射關係的 Set視圖。
System.out.println("key= " + entry.getKey() + " and value= "+entry.getValue());
}

//第三種:通過Map.entrySet使用iterator遍歷key和value
 Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
 while (it.hasNext()) {
     Map.Entry<Integer, String> entry = it.next();
     System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

//第四種:通過Map.values()遍歷所有的value,但不能遍歷key
for (String v : map.values()) {
      System.out.println("value= " + v);      
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章