一、常見集合
首先看一下他們之間的關係
Collection 接口的接口 對象的集合
├ List 子接口 按進入先後有序保存 可重複
│├ LinkedList 接口實現類 鏈表 插入刪除 沒有同步 線程不安全
│├ ArrayList 接口實現類 數組 隨機訪問 沒有同步 線程不安全
│└ Vector 接口實現類 數組 同步 線程安全
│ └ Stack
└ Set 子接口 僅接收一次,並做內部排序
├ HashSet
│ └ LinkedHashSet
└ TreeSet
Map 接口 鍵值對的集合
├ Hashtable 接口實現類 同步 線程安全
├ HashMap 接口實現類 沒有同步 線程不安全
│├ LinkedHashMap
│└ WeakHashMap
├ TreeMap
└ IdentifyHashMap
更爲精煉的總結:
Collection 是對象集合, Collection 有兩個子接口 List 和 Set
List 可以通過下標 (1,2..) 來取得值,值可以重複
而 Set 只能通過遊標來取值,並且值是不能重複的
ArrayList , Vector , LinkedList 是 List 的實現類
ArrayList 是線程不安全的, Vector 是線程安全的,這兩個類底層都是由數組實現的
LinkedList 是線程不安全的,底層是由鏈表實現的
Map 是鍵值對集合
HashTable 和 HashMap 是 Map 的實現類
HashTable 是線程安全的,不能存儲 null 值
HashMap 不是線程安全的,可以存儲 null 值
1.ArrayList
- ArrayList類中常用方法:
- ArrayList簡單使用:
public class ArrayListDemo01 {
public static void main(String[] args) {
List<String> allList=null;
Collection<String> allCollection=null;
allList=new ArrayList<String>();
allCollection=new ArrayList<String>();
allList.add("Hello");
allList.add(0,"World");
System.out.println(allList);
allCollection.add("I");
allCollection.add("am");
allCollection.add("Groot");
allList.addAll(allCollection);
System.out.println(allList);
String str[]=allList.toArray(new String[] {});
System.out.print("指定數組類型:");
for(int i=0;i<str.length;i++) {
System.out.print(str[i]+"、");
}
System.out.print("\n返回對象數組:");
Object obj[]=allList.toArray();
for(int i=0;i<obj.length;i++) {
String temp=(String)obj[i];
System.out.print(temp+"、");
}
System.out.println();
System.out.println(allList.contains("Groot")?"\"Groot\"字符串存在":"\"Groot\"不存在");
List<String> sub=allList.subList(0, 1); //左閉右開
System.out.print("集合截取:");
for(int i=0;i<sub.size();i++) {
System.out.print(allList.get(i)+"、");
}
System.out.println("");
System.out.println("Groot的位置:"+allList.indexOf("Groot"));
}
}
運行結果:
- LinkedList的簡單使用
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList<String> link=new LinkedList<String>();
link.add("a");
link.add("b");
link.add("c");
System.out.println("初始化鏈表:"+link);
link.addFirst("x");
link.addLast("Y");
System.out.println("增加頭和尾之後的鏈表:"+link);
System.out.println(link.size());
for(int i=0;i<link.size();i++){
System.out.println("循環次數:"+i);
System.out.println("鏈表大小: "+link.size());
System.out.println(link.poll()+"、"); //poll()檢索並刪除此列表的頭(第一個元素)。
}
}
}
運行結果:
2.Set
- Set類常用方法
- Set類簡單使用
import java.util.SortedSet;
import java.util.TreeSet;
public class TreeSetDemo01 {
public static void main(String[] args) {
SortedSet<String> allSet=new TreeSet<String>();
allSet.add("A");
allSet.add("B");
allSet.add("C");
allSet.add("C"); //Set不重
allSet.add("D");
allSet.add("E");
allSet.add("F");
System.out.println(allSet);
System.out.println("第一個元素:"+allSet.first());
System.out.println("最後一個元素:"+allSet.last());
System.out.println("headSet元素:"+allSet.headSet("C"));
System.out.println("tailSet元素:"+allSet.tailSet("C")); //左閉右開
System.out.println("subSet元素:"+allSet.subSet("B", "D")); //左閉右開
}
}
運行結果:
3.Map
- Map類常用方法:
- Map類簡單使用:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo01 {
public static void main(String[] args) {
Map<String,String> map=null;
map=new HashMap<String,String>();
map.put("key", "value");
map.put("father", "digen");
map.put("mother", "jimei");
String val=map.get("father");
System.out.println("father對應的內容:"+val);
Set<String> keys=map.keySet();
Iterator<String> iter=keys.iterator();
System.out.print("全部的key:");
while(iter.hasNext()){
String str=iter.next();
System.out.print(str+"、");
}
System.out.println();
Collection<String> values=map.values();
System.out.println(values.contains("digen")?"包括digen":"不包括digen");
Iterator<String> iter2=values.iterator();
System.out.print("\n全部的value: ");
while(iter2.hasNext()) {
String str=iter2.next();
System.out.print(str+"、");
}
}
}
運行結果
二.項目實戰
見下篇