java.util.Itertor接口
迭代,是Collection集合元素的通用獲取方式
Iterator也是有泛型的!!
先判斷集合中有沒有元素,有就取出來,再繼續判斷,再繼續取,直至所有取出。
boolean hasNext()
判斷是否有元素java
next()
有元素,則取出元素
remove()數組
獲取實現類的方式:
Collection接口中有個方法,iterator(),這個方法返回的就是迭代器的實現類對象。
Iterator也是有泛型的!!迭代器的泛型跟着集合走,集合什麼泛型,迭代器什麼泛型安全
1.使用集合中的方法iterator()獲取迭代器的實現類對象,使用Iterator接口接收(多態);
2.使用Iterator接口中的方法hasNext判斷是否有下一個元素;
3.使用Iterator接口中的方法next取出集合中的下一個元素。
Collection<String> coll = new ArrayList<>(); coll.add("2"); coll.add("da"); coll.add("2ue"); Iterator<String> it = coll.iterator(); while (it.hasNext()) { String s = it.next(); System.out.println(s); }
實現原理:
獲取迭代器實現類對象,並把指針指向集合的-1索引ide
Iterator<String> it = coll.iterator();
next();
除了取出下一個元素,而且將指針向後移動一位。this
底層使用的也是迭代器,使用for循環的格式,簡化了迭代器的書寫
用來遍歷集合和數組
格式:
for(集合/數組的數據類型 變量名: 集合名/數組名) {指針
sout(變量名);
}code
ArrayList<String> s2 = new ArrayList<>(); s2.add("dsd"); s2.add("222"); s2.add("34e"); for (String s :s2) { System.out.println(s); }
一種未知的數據類型,不知道使用什麼類型的數據就用泛型
是一個變量,能夠接收變量對象
建立集合對象的時候,就會肯定泛型的數據類型索引
建立集合對象,不使用泛型:
好處:接口
默認類型是Object類型,能夠存儲任意類型的數據
弊端:
不安全,引起異常(出現多種數據類型,並且不能使用多態,就是不能使用某類特有的方法,須要向下轉型,這時候存在不一樣的數據類型,向下轉型時會出現異常)
建立集合對象,使用泛型:
好處:
避免了類型轉化的麻煩 把運行期異常(代碼運行以後會拋出的異常),提高到了編譯期(寫的時候就拋出的)
弊端:
泛型是什麼類型,就只能存儲什麼類型的數據
public class Person<E> { private E name; public Person() { } public Person(E name) { this.name = name; } }
泛型定義在方法的修飾符和返回值類型之間
格式:
修飾符 <泛型> 返回值類型 方法名(參數列表(使用泛型)) {
方法體;
}
含有泛型的方法,在調用方法的時候肯定泛型的數據類型
傳遞什麼參數,泛型就是什麼類型
public <M> void method(M m) { System.out.println(m); }
public static <S> void method1(S s) { System.out.println(s); }
格式:
public interface Iterator<E> { E next(); }
使用方式1:定義接口的時候就把類型註明
接口: public interface Person2<String> { public abstract void method(String i); } 實現類: public class Person implements Person2<String>{ @Override public void method(String s) { } }
使用方式2:接口使用什麼泛型,實現類就使用什麼泛型至關於定義一個含有泛型的類