1. 程式人生 > >集合,Collection介面,ArrayList以及迭代器的使用以及部分方法。

集合,Collection介面,ArrayList以及迭代器的使用以及部分方法。

集合的體系:
目標:集合本身就是一個儲存容器;
(存和取)
必須會使用集合儲存物件;
遍歷集合,取出物件;
集合自己的特性;

ArrayList:例如儲存int型別資料;集合本身不接收基本型別,自動裝箱的儲存;

ArrayList父類是Collection,再父類是Iterable;
介面:Collection有很多子介面,常用介面是:List和Set
所有已知實現類中:ArrayList是常用類;

Collection的子類
List介面 Set介面

List介面下又有兩個實現類:
ArrayList類和 LinkedList類

Set下也有兩個常用實現類:
HashSet類和LinkedHashSet類

集合中的頂層介面就是Collection介面,翻譯成中文就是《集合,序列》;
List翻譯成中文就是列表
Set 集
ArrayList 陣列列表
LinkedList 連結串列

Collection介面中的方法:
介面中的方法是不能用的,因為介面中的方法都是抽象的,所以要使用Collection介面的實現類:
ArrayList implements List
List extends Collection

Collection介面中的方法:
boolean contains(Object o)判斷物件是否存在集合中,物件存在返回true
方法引數是Object型別
例如:boolean b = coll.contains(“rysj”) ;
sysout(b) ;
判斷了集合中是否有rysj ;
判斷的是某個物件是否在集合中;

但是
coll.add(“123”) ;
boolean b = coll.contains(123);
此時返回的是f;因為儲存進去的是String型別,查詢的是Integer型別,所以不能一起查詢;

toArray() Collection介面中的又一個方法 ;集合中的元素轉成一個數組中的元素,通俗講就是集合轉成陣列;

Object[]toArray() ;
返回時一個儲存物件的陣列;

remove(Object o)方法:移除集合中指定元素;返回值型別布林型,刪除成功返回真

coll.remove(“rysj”);
返回真,如果寫錯或其他則返回假

如果有兩個rysj的話,remove的時候刪除靠前的,也就是第一個遇到的;

迭代器:iterator
負責給集合進行遍歷;
迭代器的實現原理:
類似抓娃娃,不同的娃娃機,就像不同的集合,爪子就像iterator迭代器,負責取出

方法:
判斷集合中還有沒有可以被取出的元素hasNext 如果人有元素可迭代;返回true
next 返回迭代的下一個元素;

使用方法:
集合中的迭代器:
獲取集合中元素的方式;
介面中的兩個抽象方法如上:
Iterator介面 找實現類
Collection 介面定義方法
Iterator iterator()
ArrayList 重寫方法iterator(),返回了Iterator介面的實現類的物件

package TestDemo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class IteratorDemo {
public static void main(String[] args) {
Collection coll = new ArrayList<>() ;
coll.add(“abc1”);
coll.add(“abc2”);
coll.add(“abc3”);
coll.add(“abc4”);
//使用迭代器對集合ArrayList中的元素進行取出操作:
//第一步:呼叫集合的方法iterator獲取例項化物件
// 介面的引用等於一個實現類的物件
Iterator it = coll.iterator();
// 第二步:介面實現類物件,呼叫方法hasNext判斷集合中是否有元素
// boolean b = it.hasNext() ;
// System.out.println(b);
// 第三部,介面的實現類物件,呼叫方法next取出集合中的元素;
// String str = it.next() ;
// System.out.println(str);
while(it.hasNext()) {
System.out.println(it.next());
}
}
}

迭代器是一個通用的取出資料的操作,不管是什麼集合,都可以使用迭代器取出;

ArrayList array
Iterator it = array.iterator()
while(it.hasNext()){
String s = it.next();
}
此時指標位置在-1 ;
當迴圈開始的時候從0開始迴圈
有資料,傳出,指標+1 ;

所有有了next()指標才會移動;
如果沒有next會變成死迴圈;

如果取完再取的話會產生沒有元素的異常 ;
所以迭代器只能迭代一次 ;

迭代器的for迴圈寫法:
for(Iterator it = coll.iterator(); it.Next();){
sysout (it.next());
}

由於for迴圈不易理解,所以基本都是用while迴圈

Collection 的轉型:

Collection coll = new ArrayList();
當不指定泛型的時候,集合什麼都存;
此時coll.add(Object o);
同樣此時使用迭代器的泛型也要取消掉
Iterator i = coll.iterator();
迴圈取出的資料就是Object型別;
但是會存在安全隱患;