集合簡述

集合概述

  • 集合:就是一個存儲數據的容器
  • 集合和數組的區別:
    • 數組長度固定,集合長度不固定
    • 數組可以存儲基本數據類型和引用類型,集合只能存儲引用類型
  • 集合框架
    Alt

Collection接口

  • Collection層次結構中的根接口。Collection表示一組對象,這些對象也稱爲collection的元素。一些collection允許有重複的元素,而另一些則不允許。一些collection是有序的,而另一些是無序的。
  • List:可以重複,有序
  • Set:不能重複,無序
常用方法

方法名 描述
add(E e) 確保此collection包含指定的元素
addAll(Collection<? extends E> c) 將指定的collection中的所有元素都添加到此collection中
clear() 移除此collection中的所有元素
contains(Object o) 如果此collection包含指定元素,則返回true
containsAll(Collection<?> c) 如果此collection包含指定collection中的所有元素,則返回true
equals(Object o) 比較此collection與指定對象是否相等
isEmpty() 如果此collection不包含元素,則返回true
iterator() 返回此collection的元素上進行迭代的迭代器
remove(Object o) 從此collection中移除指定元素的單個實例,如果存在的話
removeAlll(Collection<?> c) 移除此collection中那些也包含在指定從collection中的所有元素
retainAll(Collection<?> c) 僅保留此collection中那些也包含在指定collection的元素
size() 返回此collection中的元素數
toArray() 返回包含此collection中的所有元素的數組
  • 代碼實例
package waking.test.jh;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * Collection的常用方法
 * @author waking
 *
 */
public class Demo01 {
	@SuppressWarnings("unlikely-arg-type")
	public static void main(String[] args) {
		Collection<String> c = new ArrayList();
		Collection c1 = new ArrayList();
		
		c.add("waking");
		c1.add("to");
		
		c.addAll(c1);
		
		System.out.println(c.toString());//[waking, to]
		
//		c.clear();
//		System.out.println(c.toString());//[]
		
		boolean is = c.contains("waking");
		System.out.println(is);//true
		
		boolean all = c.containsAll(c1);
		System.out.println(all);//true
		
		boolean isequ = c.equals("waking");
		System.out.println(isequ);//false
		
		boolean empty = c.isEmpty();
		System.out.println(empty);//false
		
		Iterator<String> iterator = c.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());//waking to
		}
		
//		c.remove("to");
//		System.out.println(c.toString());//[waking]

		c.retainAll(c1);
		System.out.println(c.toString());//[to]
		
		int size = c.size();
		System.out.println(size);//1
		
		System.out.println(c.toArray());//[Ljava.lang.Object;@6d06d69c
		

	}
}

泛型

  • 泛型就是可以表示一個廣泛數據類型的類型參數(泛型只能表示引用類型),把數據類型當做參數來傳遞。
  • 形式參數:聲明方法時,在方法的參數列表中聲明,而且在方法體中會使用到,是一個未知的數據
  • 實際參數:調用方法時,實際傳遞的參數。
  • 類型參數:在一個類中聲明一個未知的數據類型,在類中可以使用這個類型,但是具體類型取決於實際傳入的類型

List接口

  • 常用方法和Collection的方法大致一致可以參考
List接口的存儲特點
  • 相對有序存儲,可以存儲相同元素(不排重),可以通過下標訪問集合
  • List接口中可以使用獨用的ListIterator,具有反向遍歷的功能
List的實現類
  • ArrayList
ArrayList類是List接口的大小可變數組的實現。實現了所有可選列表操作,並允許包括null在內的所有元素。
存儲特點:
		相對有序存儲,可以存儲相同的元素(不排重),可以通過下標訪問集合元素,通過數組實現集合
存儲結構:數組
package waking.test.jh;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * List實現類ArrayList
 * @author waking
 *
 */
public class Demo02 {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("waking");
		list.add("to");
		list.add("love");
		
		//iterator遍歷
//		Iterator<String> iterator = list.iterator();
//		while(iterator.hasNext()) {
//			System.out.println(iterator.next());
//		}
		
		//listIterator遍歷
		ListIterator<String> listIterator = list.listIterator();
		
		while(listIterator.hasNext()) {
			System.out.println(listIterator.next());
		}
		
		while(listIterator.hasPrevious()) {
			System.out.println(listIterator.previous());
		}
	}
}
LinkedList類
  • LinkedList類是List接口的鏈接列表實現。實現所有可選的列表操作,並且允許所有元素(包括null)
  • 存儲結構:雙向鏈表
  • 存儲特點:相對有序存儲,可以存儲相同元素(不排重),可以通過下標訪問集合元素,通過鏈表實現的集合
package waking.test.jh;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * LinkedList實現類
 * @author waking
 *
 */
public class Demo03 {
	public static void main(String[] args) {
		List<String> list = new LinkedList<String>();
		list.add("waking");
		list.add("lilke");
		list.add("love");
		
		//通過下標訪問
		System.out.println(list.get(1));
		
		Iterator<String> iterator = list.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		
		
	}
}
ArrayList和LinkedList的總結
  • ArrayList存儲結構是數組,LinkedList存儲結構是雙向列表
  • ArrayList集合適用於對元素查詢、遍歷操作
  • LinkedList集合適用於在對元素插入和刪除操作

Set接口

  • set接口特點:無序的不可重複的(排重),不能通過下標來訪問
package waking.test.jh;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * set接口
 * @author waking
 *
 */
public class Demo04 {
	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		set.add("waking");
		set.add("to");
		set.add("love");
		
		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());//love waking to

		}
	}
}
實現類
  • hashSet
此類實現Set接口,由哈希表(實際上是一個HashMap實例)支持。它不保證set的迭代順序,特別它不保證該順序恆久不變。此類允許使用null元素。
Hash:哈希--實際含義散列,就是一種算法,把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值
哈希表:數組加鏈表,既有數組的優點也有鏈表的優點
存儲特點:相對無序存儲,不可以存儲相同元素(排重),通過哈希表實現的集合
重寫hashCode()方法
重寫equals()方法
  • LinkedHashSet
LinkedHashSet類是具有可預知迭代順序(相對有序)的set接口的哈希表和鏈接列表實現。是HashSet的子類。
存儲特點:有序存儲,不可以存儲相同元素(排重),通過鏈表實現的集合有序。
注意:LinkedHashSet集合的元素排重與HashSet集合排重方法一致
  • TreeSet
TreeSet集合是可以給元素進行重新排序的一個Set接口的實現。使用元素的自然順序對元素進行排序,或者根據創建set時提供的Comparator進行排序,具體取決於使用的構造方法
存儲特點:
無序存儲,排重,通過二叉樹實現的集合,可以給元素進行重新排序
  • SortedSet接口
原始的接口

Map接口

  • 是雙列集合
  • 以鍵值對的形式存儲
  • 鍵是唯一的,值可以重複
package waking.test.jh;

import java.util.HashMap;
import java.util.Map;

/**
 * Map接口
 * @author waking
 *
 */
public class Demo05 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("waking", 22);
		map.put("love", 25);
		
		Integer integer = map.get("waking");
		System.out.println(integer);
	}
}
  • 常用方法和以上類似
  • HashMap
基於哈希表Map接口的實現,此實現提供所有可選的映射操作,並允許使用null值和null鍵。此類不保證映射的順序
存儲特點:
相對無序存儲,元素以鍵值對形式存在,鍵不可以重複,值可以重複,元素整體排重,可以快速的通過鍵查找到所對應的值,通過哈希表實現的集合
遍歷
package waking.test.jh;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * Map遍歷
 * @author waking
 *
 */
public class Demo06 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("waking", 22);
		map.put("love", 25);
		
		Set<Entry<String, Integer>> entrySet = map.entrySet();
		for (Entry<String, Integer> entry : entrySet) {
			System.out.println(entry.getKey()+"=="+entry.getValue());
		}
		
		Set<String> keySet = map.keySet();
		for (String key : keySet) {
			System.out.println(key+"==="+map.get(key));
		}
	}
}

Collections工具類

  • 此類完全由在Collection上進行操作或返回Collection的靜態方法組成。對集合進行操作時,可以使用這個靜態方法
感謝您的觀看
發佈了19 篇原創文章 · 獲贊 19 · 訪問量 5642
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章