框架圖鎮博
一個集合對象或一個容器表示一組對象,集合中的對象稱爲元素。
上述所有的集合類,都實現了Iterator接口,這是一個用於遍歷集合中元素的接口,主要包含hashNext(),next(),remove()三種方法。它的一個子接口LinkedIterator在它的基礎上又添加了三種方法,分別是add(),previous(),hasPrevious()。也就是說如果是先Iterator接口,那麼在遍歷集合中元素的時候,只能往後遍歷,被遍歷後的元素不會在遍歷到,通常無序集合實現的都是這個接口,比如HashSet,HashMap;而那些元素有序的集合,實現的一般都是LinkedIterator接口,實現這個接口的集合可以雙向遍歷,既可以通過next()訪問下一個元素,又可以通過previous()訪問前一個元素,比如ArrayList。
怎麼理解呢,我的理解就是集合類就相當於動態數組。無非java將幾種常用的數據結構分爲幾種不同的集合類,再配合泛型進行使用,規範了數組的輸入和使用。
我們來細分一下結構圖
Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。
我們先來講講相對簡易的List.
List 接口繼承了 Collection 接口以定義一個允許重複項的有序集合
//存取函數
void add(int index, Object element)
boolean addAll(int index, Collection collection)
Object get(int index)
Object remove(int index)
Object set(int index, Object element)
//查找函數
int indexOf(Object element)
int lastIndexOf(Object element)
//遍歷
ListIterator listIterator()
ListIterator listIterator(int startIndex)
//截取子列
List subList(int fromIndex, int toIndex)
實例代碼:
public static void main(String args[])
{
List<String> list1=new ArrayList<String>();
list1.add("週二");
list1.add(1,"張三");
list1.add("李四");
Iterator<String>Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
System.out.println("-----------------");
list1.set(0, "王五");
Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
list1.remove(1);
System.out.println("-----------------");
Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
list1.addAll(list1);
System.out.println("-----------------");
Itr=list1.iterator();
while(Itr.hasNext())
System.out.println(Itr.next().toString());
list1.removeAll(list1);
}
運行結果:
Set
public interface Set<E>extends Collection<E>
{
int size();
boolean contains(E);
boolean add(E);
boolean remove(E);
Iterator<E> iterator();
//批處理操作
boolean containAll(Collection<?> c);
boolean addAll(Collection<?> c);
boolean removeAll(Collection<?>c);
//使當前集合只保留c的元素
boolean retainAll(Collection<?>c);
void clear();
}
具體使用方法和List沒有太大的差別,值得注意的是:
Set接口有三個使用的類,即:
//HashSet是無序的存儲。訪問效率快
Set<String> s =new HashSet<String>();
//TreeSet中實現了SortedSet,可進行升序排列
Set<String> s=new TreeSet<String>();
//LinkHashSet具有固定的順序
Set<String> s=new LinkedHashSet<String>();
//其實所有的集合類都可以用Collection中的排序方法進行排序 後來會細講
至於Queen用的不是很多,就不多說了。
再來看看比較常用的Map
常用操作:
//返回值是被替換的值。
Object put(Object key, Object value);
Object remove(Object key);
void putAll(Map mapping);
void clear();
Object get(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
//下面的方法允許您把鍵或值的組作爲集合來處理
public Set keySet();
public Collection values();
public Set entrySet();
引用方法
//有序樹,存在SortedMap結口
Map<String,String>m= new TreeMap<String,String>();
//無序樹,並允許有空的鍵值
Map<String,String>m= new HashMap<String,String>();
//同步的HashTable
Map<String,String>m= new Hashtable<String,String>();
這裏面最大的問題就是:
HashMap和Map的區別。ArrayList和List的區別
答:Map,List都只是接口,一個沒有被實現的抽象類,Java 集合框架中一部分,用於存儲鍵值對,HashMap,ArrayList是用哈希算法實現Map,List的實用類。