集合概述
- 集合:就是一個存儲數據的容器
- 集合和數組的區別:
- 數組長度固定,集合長度不固定
- 數組可以存儲基本數據類型和引用類型,集合只能存儲引用類型
- 集合框架
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;
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());
boolean is = c.contains("waking");
System.out.println(is);
boolean all = c.containsAll(c1);
System.out.println(all);
boolean isequ = c.equals("waking");
System.out.println(isequ);
boolean empty = c.isEmpty();
System.out.println(empty);
Iterator<String> iterator = c.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
c.retainAll(c1);
System.out.println(c.toString());
int size = c.size();
System.out.println(size);
System.out.println(c.toArray());
}
}
泛型
- 泛型就是可以表示一個廣泛數據類型的類型參數(泛型只能表示引用類型),把數據類型當做參數來傳遞。
- 形式參數:聲明方法時,在方法的參數列表中聲明,而且在方法體中會使用到,是一個未知的數據
- 實際參數:調用方法時,實際傳遞的參數。
- 類型參數:在一個類中聲明一個未知的數據類型,在類中可以使用這個類型,但是具體類型取決於實際傳入的類型
List接口
- 常用方法和Collection的方法大致一致可以參考
List接口的存儲特點
- 相對有序存儲,可以存儲相同元素(不排重),可以通過下標訪問集合
- List接口中可以使用獨用的ListIterator,具有反向遍歷的功能
List的實現類
ArrayList類是List接口的大小可變數組的實現。實現了所有可選列表操作,並允許包括null在內的所有元素。
存儲特點:
相對有序存儲,可以存儲相同的元素(不排重),可以通過下標訪問集合元素,通過數組實現集合
存儲結構:數組
package waking.test.jh;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo02 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("waking");
list.add("to");
list.add("love");
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;
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;
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());
}
}
}
實現類
此類實現Set接口,由哈希表(實際上是一個HashMap實例)支持。它不保證set的迭代順序,特別它不保證該順序恆久不變。此類允許使用null元素。
Hash:哈希--實際含義散列,就是一種算法,把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值
哈希表:數組加鏈表,既有數組的優點也有鏈表的優點
存儲特點:相對無序存儲,不可以存儲相同元素(排重),通過哈希表實現的集合
重寫hashCode()方法
重寫equals()方法
LinkedHashSet類是具有可預知迭代順序(相對有序)的set接口的哈希表和鏈接列表實現。是HashSet的子類。
存儲特點:有序存儲,不可以存儲相同元素(排重),通過鏈表實現的集合有序。
注意:LinkedHashSet集合的元素排重與HashSet集合排重方法一致
TreeSet集合是可以給元素進行重新排序的一個Set接口的實現。使用元素的自然順序對元素進行排序,或者根據創建set時提供的Comparator進行排序,具體取決於使用的構造方法
存儲特點:
無序存儲,排重,通過二叉樹實現的集合,可以給元素進行重新排序
原始的接口
Map接口
- 是雙列集合
- 以鍵值對的形式存儲
- 鍵是唯一的,值可以重複
package waking.test.jh;
import java.util.HashMap;
import java.util.Map;
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);
}
}
基於哈希表Map接口的實現,此實現提供所有可選的映射操作,並允許使用null值和null鍵。此類不保證映射的順序
存儲特點:
相對無序存儲,元素以鍵值對形式存在,鍵不可以重複,值可以重複,元素整體排重,可以快速的通過鍵查找到所對應的值,通過哈希表實現的集合
遍歷
package waking.test.jh;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
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的靜態方法組成。對集合進行操作時,可以使用這個靜態方法
感謝您的觀看