Collection-迭代方法
1、toArray()? 返回Object類型數據,接收也需要Object對象!?Object[] toArray();
Collection c = new ArrayList();
Object[] arr = c.toArray();
2、iterator()? Collection的方法,返回實現Iterator接口的對象,一般用Iterator接口類型數據接收,體現程序的多態性,是程序靈活的表現
?迭代器的作用:就是用于抓取集合中的元素。
迭代器的方法:
? ? ? ? ? ? hasNext()?? 問是否有元素可遍歷。如果有元素可以遍歷,返回true,否則返回false 。
? ? ? ? ? ? next() ? ? ? ? 獲取元素
? ? ? ? ? ? remove() ?? 移除迭代器最后一次返回 的元素。
NoSuchElementException 沒有元素的異常。
出現的原因: 沒有元素可以被迭代(抓取)了
import java.util.*; public class Demo1 {public static void main(String[] args) {Collection c = new ArrayList();Collection r = new ArrayList();c.add("李杰");c.add("李英");c.add("李漢斯");c.add("李漢三");c.add("狗蛋");Iterator b = c.iterator();Iterator h = r.iterator();//返回一個迭代器 //疑問:iterator()方法返回的是一個接口類型,為什么接口又可以調用方法可以使用呢? //iterator 實際 上返回的是iterator接口的實現類對象。 System.out.println(b.hasNext());System.out.println(h.hasNext());b.next();b.next();b.remove(); //刪除迭代器最后一次返回的元素。/*while(b.hasNext()){ // hasNext() 問是否有元素可以遍歷。System.out.println("元素:"+ b.next()); //獲取元素}*//*清空集合 的元素while(b.hasNext()){b.next();b.remove();}*/System.out.println("集合的元素:"+ c);} }
因為迭代器不會返回元素,所以remove();方法不會主動移除集合中數據,需要配合next()使用。及刪除的是next()最后一次抓取的數據
遍歷集合的方法
1、
Object[] arr = c.toArray(); // toArray()? 把集合 的元素存儲到一個 Object的數組中 返回。
for(int i = 0 ; i<arr.length ; i++){
?System.out.print(arr[i]+",");
}
2、使用hasNext() ? ?next()組合方法便利
while(it.hasNext()){
User user = (User) it.next();
if(user.account==id&&user.password.equals(password)){
isLogin = true;
? ?? }
}
3、
使用get方法遍歷集合的元素:
??for (int i = 0; i < list.size() ; i++) {
???System.out.print(list.get(i)+",");
??}
集合的體系:
?Collection 單列集合 的根接口
? List? 如果是實現了List接口的集合類,該集合類具備的特點:有序,可重復
Set?? 如果是實現了Set接口的集合類,該集合類具備的特點: 無序,不可重復
List接口
有序: 集合的有序不是指自然順序,而是指添加進去的順序與元素出來的順序是一致的
List接口中特有的方法具備的特點: 操作的方法都存在索引值。?
只有List接口下面的集合類才具備索引值。其他接口下面的集合類都沒有索引值。
List接口中特有方法:
添加
? ?add(int index, E element)
? ?addAll(int index, Collection<? extends E> c)
獲取:
?? get(int index)
?? indexOf(Object o)
??lastIndexOf(Object o)
?? subList(int fromIndex, int toIndex)
修改:
??set(int index, E element)
迭代
? ?listIterator()
import java.util.*;public class Demo2 {public static void main(String[] args) {List list= new ArrayList();list.add("李杰");list.add("李英");list.add("李漢三"); list.add("李漢斯");/* //添加方法list.add(2, "李四"); List list2 = new ArrayList();list2.add("張三");list2.add("王二");list.addAll(2,list2);*//*//獲取的方法 System.out.println(list.get(1)); //根據索引值獲取集合中的元素使用get方法遍歷集合的元素:for (int i = 0; i < list.size() ; i++) {//判斷集合長度用size()System.out.print(list.get(i)+",");}System.out.println(list.indexOf("李杰"));//找出指定元素第一次出現在集合中 的索引值System.out.println(list.lastIndexOf("李漢斯"));//找指定的元素最后一次出現在集合中的索引值List subList = list.subList(1, 3); //指定開始與結束的索引值截取集合中的元素。System.out.println(subList)//返回值是一個List輸出子集合的元素 */ list.set(3, "李白"); //使用指定的元素替換指定索引值位置的元素。 System.out.println(list);//輸出集合的元素,查看效果 } }
?
ListIterator接口特有的方法:
?
?添加:
?? hasPrevious()? 判斷是否存在上一個元素
??previous()??? 當前指針先向上移動一個單位,然后再取出當前指針指向的元素
? ?next();? 先取出當前指針指向的元素,然后指針向下移動一個單位
? ?add(E e)?? 把當前有元素插入到當前指針指向的位置上
??set(E e)?? 替換迭代器最后一次返回的元素
??
?
import java.util.*;public class Demo3 {public static void main(String[] args) {List list = new ArrayList();list.add("李杰");list.add("李英");list.add("李漢三");list.add("李漢斯");ListIterator it = list.listIterator(); //返回的是一個List接口中特有的迭代器/*System.out.println(it.hasPrevious())//判斷是否有上一個元素,有true,沒有false System.out.println(it.previous());//獲取上一個元素it.next();System.out.println(it.previous());//獲取上一個元素 while(it.hasNext()){it.next();}while(it.hasPrevious()){System.out.println("元素:"+ it.previous());}it.next();it.next();it.add("李白");*/it.next();it.next();it.set("李白");System.out.println("集合的元素:"+ list); } }
作業: 使用三種方式遍歷集合的元素. ?
一、 使用get方法遍歷。
二、 使用迭代器正序遍歷。
三、 使用迭代器逆序遍歷。
import java.util.*; public class Demo4 {public static void main(String[] args) {List list = new ArrayList();list.add("李杰");list.add("李英");list.add("李漢三");for(int i = 0 ; i<list.size() ; i++){System.out.print(list.get(i)+",");}System.out.println();ListIterator it = list.listIterator();while(it.hasNext()){System.out.print(it.next()+",");}System.out.println();while(it.hasPrevious()){System.out.print(it.previous()+",");} } }
?