Java基礎——常用物件API(三)——集合
阿新 • • 發佈:2019-01-10
一、集合框架
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);