java學習---集合框架

java泛型是僞泛型因爲編譯成功後的class文件是沒有泛型的
泛型的好處:安全、將錯誤由編譯時期提前到了運行時期

集合框架之List接口:

List接口特點:有序、索引、可以重複元素
	實現類ArrayList,LinkedList
List接口特有的方法,即帶有索引的功能
add():在指定的索引添加數據,注意越界異常
remove():移除指定索引上的元素,同時返回被刪除前的元素
set():修改指定索引上的元素

迭代器的併發異常:

在遍歷的過程中,使用了集合方法修改了集合的長度,這是不允許的,因爲在List遍歷的過程中,指針是一直向前移動的,遍歷過程中不可能因爲添加了元素而使指針回退重新遍歷,這是不可能的!!!

如下案例:

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		list.add("abc4");
		Iterator<String> it = list.iterator();
		while(it.hasNext()){
			String s = it.next();
			if(s.equals("abc3")){
				list.add("ABC3");
			}
			System.out.println(s);
		}
	}

注意,最後會引起Exception in thread “main” java.util.ConcurrentModificationException,併發修改異常
該程序是錯誤的操作

數據的存儲結構:

堆棧:先進後出,如子彈壓入彈夾

隊列:先進先出,如安檢

數組:特點查找元素快,增刪元素慢(慢的原因是數組是定長的)

鏈表:多節點之間採用地址進行連接,查找速度慢,增刪速度快

ArrayList特點:查找元素快,增刪元素慢

LinkedList:增刪速度快,查詢慢,LinkedList集合數據存儲的結構是鏈表結構,所以他提供了大量的首尾操作的方法

LinkedList特有的方法:
addFirst()添加到鏈表的開頭
addLast()添加到鏈表的結尾
removeFirst
removeLast

Vector類已經被ArrayList取代了,已經沒用了

Set接口:不允許存儲重複對象,沒索引

實現類:HashSet(哈希表)
	特點,無序集合,沒有索引
    存儲取出都比較快
	線程不安全,運行速度比較快
	數組長度達到12的時候就需要對數組擴容
	String類繼承Object類,重寫了父類的方法hashCode
	
LinkedHashSet基於鏈表的哈希表實現
繼承自HashSet
LinkedHashSet具有順序,存儲和取出順序相同的
線程不安全的集合,運行速度比較快
問題:
1、如果兩個對象的哈希值相同p1.hashCode()==p2.hashCode()
兩個對象的equals一定返回true嗎?p1.equals(p1)
答案是不一定
2、如果兩個對象的equals方法返回true,p1.equals(p2)==true
兩個對象的哈希值一定相同嗎?
答案是一定的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章