Collection接口:全部单列集合最顶层接口java
List接口:单列集合中的一种数组
是有序的集合,容许储存重复的元素,有索引,能够使用普通for循环遍历框架
Set接口:单列集合中的一种ide
不容许储存重复元素,没有索引,不能使用普通for循环遍历this
Collection单列集合共性方法:code
boolean add(E) //增长元素 boolean contains(E) //判断是否存在某个元素 boolean remove(E) //删除元素 boolean isEmpty() //判断集合是否为空 int size() //获取大小 Object[] toArray() //集合转换为数组 void clear() //清空
迭代:集合元素通用获取方式,取出元素前先判断集合中有没有元素,若是有就把该元素取出来,再继续,直到取出全部元素对象
使用Iterator接口对集合进行遍历排序
Iterator迭代器是一个接口,没法直接使用,须要使用Iterator接口的实现类对象索引
Collection接口中有一个方法是Iterator(),返回的是Iterator接口的实现类对象接口
使用步骤:
使用集合中Iterator()方法获取迭代器实现类对象,使用Iterator接口接收(多态)
使用Iterator接口中的hasNext方法判断有没有下一个元素
使用Iterator接口中的Next方法取出集合中的下一个元素
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; //Iterator迭代器 public class IteratorDemo01 { public static void main(String[] args) { Collection<String> collection = new ArrayList<>(); collection.add("hello"); collection.add("java"); collection.add("100"); //获取迭代器 Iterator<String> iterator = collection.iterator(); //使用Iterator接口中的hasNext方法判断有没有下一个元素,返回boolean值 while (iterator.hasNext()){ //使用Iterator接口中的Next方法取出集合中的下一个元素 System.out.println(iterator.next()); } } }
底层使用的也是迭代器,使用for循环的格式简化
全部单列集合均可以使用加强for循环
加强for循环能够用来遍历集合和数组
for(数据类型 变量名 : 集合名){ // }
//加强for循环 for(String s : collection){ System.out.println(s); }
泛型是一种未知的数据类型,当不知道使用什么数据类型的时候能够使用泛型,如E
建立集合对象的时候就会肯定泛型的数据类型
ArrayList<Student> list = new ArrayList<>();
定义含有泛型的类和方法:
方法格式:修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){ //方法体; }
//定义含有泛型的类 public class GenericClassDemo<E> { private E name; public E getName() { return name; } public void setName(E name) { this.name = name; } //定义含有泛型的普通方法 public <E> void method1 (E e){ System.out.println(e); } //定义含有泛型的静态方法 public static <E> void method2(E e){ System.out.println("静态方法,输入数据:"+e); } public static void main(String[] args) { //建立一个泛型为Integer的对象 GenericClassDemo<Integer> list1 = new GenericClassDemo<>(); list1.setName(200); Integer name1 = list1.getName(); System.out.println(name1); list1.method1(100);//调用方法时肯定泛型 //建立一个泛型为String的对象 GenericClassDemo<String> list2 = new GenericClassDemo<>(); list2.setName("小明"); System.out.println(list2.getName()); //调用静态方法 GenericClassDemo.method2("200"); } }
含有泛型的接口:
//定义含有泛型的接口 public interface GenericInterface<E> { public abstract void method(E e); } //////////////////////////////////////// /* 方法一:实现类实现接口,并指定接口泛型,此时覆盖重写和调用方法时默认泛型为指定类型 */ public class GenericInterfaceImpl01 implements GenericInterface<Double>{ @Override public void method(Double d) { System.out.println("方法一覆盖重写,输入数据:"+d); } } /* 方法二:接口用什么泛型,实现类就用什么泛型,建立对象的时候肯定泛型类型 */ public class GenericInterfaceImpl02<E> implements GenericInterface<E>{ @Override public void method(E e) { System.out.println("方法二覆盖重写,输入数据:"+e); } } //////////////////////////////////////// public class GenericClassMain { public static void main(String[] args) { GenericInterfaceImpl01 list3 = new GenericInterfaceImpl01(); list3.method(8.8);//泛型已经默认为Double GenericInterfaceImpl02<String> list4 = new GenericInterfaceImpl02<>(); list4.method("garen");//建立对象的时候肯定泛型类型 } }
泛型通配符:<?> 表示,表明了任意数据类型
不能建立对象使用
只能做为方法参数使用
import java.util.ArrayList; import java.util.Iterator; public class GenericWildcard { public static void main(String[] args) { ArrayList<String> list1 = new ArrayList<>(); list1.add("garen"); list1.add("temmo"); ArrayList<Integer> list2 = new ArrayList<>(); list2.add(100); list2.add(200); arrayPrint(list1); arrayPrint(list2); } //定义一个方法能遍历全部类型的ArrayList集合 //此时不知道泛型类型,用泛型通配符 public static void arrayPrint(ArrayList<?> list){ Iterator<?> iterator = list.iterator();//获取迭代器 while (iterator.hasNext()){ System.out.println(iterator.next()); } // for(Object o: list){ // System.out.println(o); // } } }