Collection接口与Iterator接口
Collection集合
集合与数组的差异:
- 数组的长度是固定的,集合的长度是可变的。
- 数组中存储的是同一类型的元素,可以存储基本数据类型值,也可以用来存储对象。集合存储的都是对象,而且对象的类型可以不一致。在开发中,一般当对象多的时候,用集合来存储。
Collection接口:定义的是所有单列集合中共性的方法,所有单列集合都可以使用共性的方法。没有带索引的方法。
集合:Vector集合、ArrayList集合、LinkedList集合、TreeSet集合、HashSet集合、LinkedHashSet集合。
List接口下包含:Vector集合、ArrayList集合、LinkedList集合具有以下共性
- 有序的集合(存储和取出顺序相同)。
- 允许存储重复的元素。
- 有索引,可以使用普通的for循环遍历。
Set接口下包含:TreeSet集合(无序的集合)、HashSet集合(无序的集合)、LinkedHashSet(有序的集合)集合具有以下共性
- 不允许存储重复元素
- 没有索引(不能使用普通for循环遍历)
List和Set继承了Collection接口。
Collection集合方法
public boolean add(E e)`: 把给定的对象添加到当前集合中 。
public void clear()` :清空集合中所有的元素。
public boolean remove(E e)`: 把给定的对象在当前集合中删除。
public boolean contains(E e)`: 判断当前集合中是否包含给定的对象。
publicboolean isEmpty()`: 判断当前集合是否为空。
public int size()`: 返回集合中元素的个数。
public Object[] toArray()`: 把集合中的元素,存储到数组中。
public class demo01Collection {
public static void main(String[] args) {
//创建一个集合对象
Collection<String> coll=new ArrayList<>();
// public Boolean add(E,e); 向集合中添加元素
coll.add("hello");
coll.add("world");
coll.add("heima");
coll.add("java");
// public boolean remove(E e) 删除集合中的某个元素
Boolean result=coll.remove("hello");
System.out.println(result);//true
System.out.println(coll);*///[world,heima,java]
// public void clear() 清空集合所有元素
//coll.clear();
//System.out.println(coll);//[]
boolean contains(E e) 判断集合中是否包含某个元素
boolean res=coll.contains("world");
System.out.println(res);//true
// public boolean isEmpty() 判断集合是否为空
System.out.println(coll.isEmpty());//false
// public int size() 获取集合长度
System.out.println(coll.size());//3
// public Object[] toArray() 将集合转成一个数组
Object[] arr=coll.toArray();
//遍历数组
for (int i = 0; i <arr.length; i++) {
System.out.println(arr[i]);
}
}
}
Iterator接口
迭代:即Collection集合元素的通用获取方式。在取出元素之前要先判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。一直吧集合中的所有元素全部取出。这种取出方式专业术语称迭代。
Iterator接口的常用方法:
-
public boolean hasNext():
判断集合中还有没有下一个元素,有就返回true,没有就返回false。 -
public E next() 返回迭代的下一个元素,取出集合中的下一个元素。
Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊。
Collection接口中有一个方法,叫Iterator(),这个方法返回的就是迭代类实现的对象
Iteratoriterator(),返回在此collection的元素上进行迭代的迭代器。
迭代器的使用步骤:
1、先使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收多态
2、使用Iterator接口中的方法hasNext判断还有没有下一个元素
3、使用Iterator接口中的方法next取出集合中的下一个元素
public class demo01Iterator {
public static void main(String[] args) {
//创建一个集合对象
Collection<String> coll = new ArrayList<>();
//往集合中添加元素
coll.add("姚明");
coll.add("科比");
coll.add("麦迪");
coll.add("艾弗森");
coll.add("詹姆斯");
/*1、使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
注意:
Iterator接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型 */
// 多态 接口 实现类对象
Iterator<String> it=coll.iterator();
//2、使用Iterator接口中的方法hasNext判断还有没有下一个元素
while(it.hasNext()){
//3.使用Iterator接口的方法next取出集合的下一个元素
String s = it.next();
System.out.println(s);}
System.out.println("========================");
//1.初始化表达式,获取迭代器 2.布尔表达式,判断有无下一元素 3.步进表达式省略,因 为next()方法会向下移动指针
for(Iterator<String> it2=coll.iterator();it2.hasNext();){
String s2=it2.next();
System.out.println(s2);
}
}
}
增强for循环
增强for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写
是JDK1.5之后出现的新特性
Collection
public interface Iterable
增强for循环:用来遍历集合和数组
格式:
for(集合/数组的数组类型 变量名;集合名/数组名){System.out.println(s)}
public class StrongFor {
public static void main(String[] args) {
demo01();
demo02();
}
//使用增强for循环遍历数组
private static void demo01(){
int[] arr={1,2,3,4,5};
for (int i:arr) {
System.out.println(i);
}
}
//使用for循环遍历集合
private static void demo02(){
ArrayList<String> list=new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
for (String s:list
) {
System.out.println(s);
}
}
}