1. 程式人生 > >Java基礎——常用物件API(三)——集合

Java基礎——常用物件API(三)——集合

一、集合框架

1.概述

面向物件的語言會產生很多物件,為了方便儲存,就要有容器來儲存這些物件。區別於陣列,集合是可變長度的

注意:集合中不可以儲存基本資料型別。

簡單總結一下,集合與陣列的區別在於長度可變、不能儲存基本資料型別。

2.體系&共性功能

Collection是層次結構中的根介面,即集合框架的頂層。我們先來了解它有哪些功能,就能瞭解他的實現有哪些基本功能。

2.1.新增

boolean add(E e);
boolean addAll(Collection<? extends E> c);

2.2.刪除

boolean remove(object obj);
boolean removeAll(Collection coll);//將兩個集合中的相同元素從呼叫removeAll的集合中刪除

void clear();//清空

2.3.判斷

boolean contains(object obj);
boolean containsAll(Collection coll);//判斷是否包含集合
boolean isEmpty();//判斷是否為空

2.4.獲取

int size();//集合中的個數
Interator<E> iterator();//返回元素上進行迭代的迭代器,就是取出元素的方式,返回迭代器物件

2.5.其他

boolean retainAll(Collection<E> coll);//取交集
Object[] toArray();//返回包含此 collection 中所有元素的陣列。

3.迭代器的使用iterator

3.1.使用

查API:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

3.2.原理

該物件必須依賴於具體容器,因為每一個容器的資料結構都不同。
所以該迭代器物件是在容器中進行內部實現的。
對於使用容器者而言,具體的實現不重要,只要通過容器獲取到該實現的迭代器的物件即可,也就是iterator方法。
    
Iterator介面就是對所有的Collection容器進行元素取出的公共介面。
其實就是抓娃娃遊戲機中的夾子!

二、List和Set(列表和集合)

1.特點

  • List:有序(存入和取出的順序一致),元素都有索引(角標),元素可以重複
  • Set:元素不能重複,無序

2.List常見方法

List:特有的常見方法:有一個共性特點就是都可以操作角標。

2.1.新增

void add(int index, T element);
void add(int index, Collection coll);

2.2.刪除

Object remove(index);//注意可以返回被刪除物件

2.3.修改

Object set(index,element);

2.4.獲取

Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);

2.5.listIterator介面

List list;
//通用方法
Iterator it = list.iterator();
//特有方法,只有List有
list.get(x);//int x,返回List中的物件型別

例子:

public static void main(String[] args) {

		List list = new ArrayList();
//		show(list);
		
		
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		
		System.out.println("list:"+list);
		ListIterator it = list.listIterator();//獲取列表迭代器物件
		//它可以實現在迭代過程中完成對元素的增刪改查。
		//注意:只有list集合具備該迭代功能.
		
		
		while(it.hasNext()){
			
			Object obj = it.next();
			
			if(obj.equals("abc2")){
				it.set("abc9");
			}
		}
		System.out.println("hasNext:"+it.hasNext());
		System.out.println("hasPrevious:"+it.hasPrevious());
		
		
		while(it.hasPrevious()){
			System.out.println("previous:"+it.previous());
		}
		System.out.println("list:"+list);
	}

3.List 常用子類的特點

  • Vector:內部是陣列資料結構,是同步的增刪,查詢都很慢
  • ArrayList:內 部是陣列資料結構,是不同步的。替代了Vector。查詢的速度快。
  • LinkedList:內部是連結串列資料結構,是不同步的。增刪元素的速度很快。

4.Set無序、可重複

4.1.HashSet

雜湊衝突解決辦法:1.順延;2.串聯

4.2.LinkedHashSet<E>

具有可預知迭代順序的 Set 介面的雜湊表和連結列表實現。

特點:連結串列儲存,有序;不可重複。

4.3.TreeSet

使用元素的自然順序對元素進行排序,或者根據建立 set 時提供的 Comparator 進行排序,具體取決於使用的構造方法。

特點:可以對set元素進行排序,

TreeSet集合第一種排序方式:讓元素自身具備比較功能,重寫被比較物件的CompareTo方法(需要實現Comparable介面)

TreeSet集合第二種排序方式:讓TreeSet具備比較能力(Comparator怎麼寫?

class ComparatorDemo implements Comparator<StringToInt>{
    @Override
    public int compare(StringToInt o1, StringToInt o2) {

        return o1.comp-o2.comp;
    }
}
//實現
ComparatorDemo<StringToInt> comp = new CompparatorDemo<StringToInt>();
TreeSet ts = new TreeSet(Comp);