Java集合框架(包括常用方法小記)

在學校學習的《數據結構》課程中,對各種數據結構已經有了較爲深刻的認識(C++實現),因此在學習Java的過程中,直接應用框架即可。
博客總結於《Java語言程序設計進階篇》

在面向對象思想裏,一種數據結構也被認爲是一個容器。它能存儲其他對象(數據或元素)的對象。定義一種數據結構從本質上講就是定義一個類。

集合

  • Set 存儲不重複的元素
  • List 存儲一個由元素構成的有序集合
  • Queue 需要用先進先出方式處理集合是存儲對象的容器

Collection接口是處理對象集合的根接口,它有許多公共方法。其中,addAllset1.addAll(set2)把指定集合中所有元素都添加到這個集合中;removeAllset1.removeAll(set2)從這個集合中刪除指定集合中的元素;retainAllset1.retainAll(set2)保留兩個集合中的共同元素。


Set

Set接口提供的三個具體類是散列類HashSet、鏈式散列集LinkedHashSet和樹形集TreeSet。

HashSet類可以用來存儲互不相同的任何元素,大多數類的都實現了hashcode方法。遍歷時可以用迭代器或者是for-each循環。

public static void main(String[] args){
	Set<String> set = new HashSet<String>();
	set.add("Hello");set.add("world");
	Iterator<String> iterator = set.iterator();
	while(iterator.hasNext()){
		System.out.println(iterator.next()+" ");
	}
	//或者是如下
	for(Object element: set){
		System.out.println(iterator.next()+" ");
	}
}

LinkedHashSet用鏈表實現來擴展HashSet類,支持對規則集內的元素排列。HashSet中的元素是無序的,LinkedHashSet可以按照插入規則集的順序提取。如果不需要維持順序則選用效率更高的HashSet。
TreeSet擴展了一些方法。其他用法相同。
first()返回第一個元素 last()返回最後一個元素 headSet(A)返回A之前的元素 tailSet(A)返回A之後的元素 lower(A)小於A的最大元素 higher(A)大於A的最小元素 floor(A)小於等於A的最大元素 ceiling(A)大於等於A的最小元素 pollFirst()pollLast()刪除並返回第一個/最後一個元素

Comparator
有時希望將元素插入到一個樹結合中,但這些元素不是Comparable的實例也就是不能直接排序,這時候需要自定義一個比較器來比較這些元素,需要創建一個接口類。
總結:Comparator用於比較沒有實現Comparable的類的對象。

public static void main(String[] args){
	Set<GeometricObject> set = new TreeSet<GeometricObject>(
	new GeometricObjectComparator());
	set.add(new Rectangle(4,1));
	set.sdd(new Circle(30));
	for(GeonetricObject element:set){
		System.out.println(element.getArea());
	}
}

線性表

  • add(index,element)在指定下標處插入元素
  • addAll(index,collection)在指定下標處插入集合
  • remove(index)刪除指定下標元素
  • set(index,element)在指定下標設置新元素
  • indexOf(element)獲取指定元素在線性表中第一次出現時的下標
  • lastIndexOf(element)最後一次出現的下標
  • subList(fromIndex,toIndex)獲得一個子線性表

ArrayList是數組線性表,LinkedList是鏈表。因此,LinkedList除了實現List接口的方法外,還提供了從線性表兩端提取、插入和刪除元素的方法。靜態方法
Vector類與ArrayList類一樣,但同步方法用於防止兩個或多個線程同時訪問某個向量時引起數據損壞。對於不需要同步的程序來說,ArrayList的效率更高。棧類Stack是作爲Vector的擴展類實現的。empty();peek();pop();push(o:E);search(o:Object);

隊列是先進先出的數據結構,優先隊列的元素被賦予優先級,擁有最高優先級的元素首先被刪除。增加了offer(element: E)向隊列插入一個元素,隊列爲空返回null poll();獲取並刪除隊列頭,隊列爲空拋異常 remove()獲取並刪除隊列頭peek();獲取但不刪除隊列頭,隊列爲空返回null element();獲取但不刪除隊列頭,隊列爲空拋異常。
Deque爲雙端隊列,有addFirst(e),removeFirst(),addLast(e),removeLast(),getFirst()和getLast()

鏈表創建隊列實例

public static void main(String[] args){
	Queue<String> queue = new LinkedList<String>();
	queue.offer("hello");
	queue.offer("world");
	while(queue.size()>0){
		System.out.println(queue.remove());
	}
}

圖(Map)

在這裏插入圖片描述

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