集合,,,ArrayList集合存储元素,,,Collection接口的基本方法,,, Iterator迭代器,,,集合元素的向下转型
第1章 集合
集合,集合是java中提供的一种容器,可以用来存储多个数据。
数组的长度是固定的。集合的长度是可变的。集合中存储的元素必须是引用类型数据
1.1 ArrayList集合存储元素
ArrayList集合存储5个int类型元素
public static void main(String[] args){ ArrayList<Integer> arr=new ArrayList<Integer>(); arr.add(111); arr.add(222); arr.add(333); arr.add(444); arr.add(555); for(int i:arr){ System.out.println(i); } }
ArrayList集合存储5个Person类型元素
package com.oracle.Demo01; import java.util.ArrayList; public class Jihe { public static void main(String[] args) { ArrayList<Person> arr=new ArrayList<Person>(); arr.add(new Person("小红",12)); arr.add(new Person("小丸子",13)); arr.add(new Person("薯条",15)); arr.add(new Person("可乐",17)); arr.add(new Person("汉堡",10)); for(Person i:arr){ System.out.println(i); } } }
package com.oracle.Demo01; public class Person { String name; int age; @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } public Person(String name, int age) { super(); this.name = name; this.age = age; } }
1.2 集合的继承实现关系
List有序,允许元素重复。set无序,不允许元素重复
1.3 Collection接口的基本方法
创建集合的格式:
方式1创建的集合,只能存储<>中指定的元素类型,该方式为常用方式
方式2创建的集合,集合的元素类型默认为Object类型,即任何类型的元素都可以存储。
//创建集合 Collection coll = new ArrayList(); //1,往集合中添加对象元素。add(E e)方法,E代表创建集合时所指定的数据类型如<String>,那么,E就代表String类型;创建集合时若没有指定数据类型,那么,E就代表Object类型。 coll.add("abc"); coll.add("ef"); coll.add("g"); //把集合打印一下。 System.out.println(coll); //打印结果为:[abc, ef, g] System.out.println(coll.toString()); //打印结果为:[abc, ef, g] //2,从集合中删除元素。remove(Object o)方法 coll.remove("ef"); //删除后,集合元素为[abc, g] //3,判断集合中是否包含指定元素。contains(Object o)方法 System.out.println(coll.contains("abc"));//判断coll里有没有abc //打印结果为true System.out.println(coll.contains("ef")); //打印结果为false //4,获取集合元素个数。size()方法 System.out.println(coll.size()); //打印结果为2 //5,返回包含集合中所有元素的数组。toArray()方法 String[] array = coll.toArray(); //数组中的元素为{"abc", "g"} //6,清除集合元素。remove()方法 coll.clear(); //清空后,集合元素为[],代表没有元素
第2章 Iterator迭代器
hasNext()方法:用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。
next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
1.1 Iterator迭代方式的代码体现
在Collection接口描述了一个抽象方法iterator方法,所有Collection子类都实现了这个方法,并且有自己的迭代形式。
//1,创建集合对象。 Collection<String> coll = new ArrayList<String>(); coll.add("abc1"); coll.add("abc2"); coll.add("abc3"); coll.add("abc4"); //2.获取容器的迭代器对象。通过iterator方法。 Iterator it = coll.iterator(); //3,使用具体的迭代器对象获取集合中的元素。参阅迭代器的方法 while(it.hasNext()){ System.out.println(it.next()); } /* 迭代器for循环的形式的使用 for (Iterator i = coll.iterator(); i.hasNext(); ) { System.out.println(it.next()); } */
集合元素的向下转型
Collection coll = new ArrayList();//不声明类型 coll.add("abc"); coll.add("aabbcc"); coll.add(1); Iterator it = coll.iterator(); while (it.hasNext()) { //由于元素被存放进集合后全部被提升为Object类型 //当需要使用子类对象特有方法时,需要向下转型 String str = (String) it.next(); System.out.println(str.length()); }
不声明类型,如果集合中存放的是多个对象,这时进行向下转型会发生类型转换异常。
Iterator接口也可以使用<>来控制迭代元素的类型的。
Collection<String> coll = new ArrayList<String>(); coll.add("abc"); coll.add("aabbcc"); coll.add("cat"); Iterator<String> it = coll.iterator(); while (it.hasNext()) { String str = it.next(); //当使用Iterator<String>控制元素类型后,就不需要强转了。获取到的元素直接就是String类型 System.out.println(str.length()); }
Collection<Integer> arr=new ArrayList<Integer>(); arr.add(123); arr.add(234); arr.add(456); Iterator<Integer> it=arr.iterator(); while(it.hasNext()){ if(it.next()==234){ arr.add(666);//不能直接添加元素 } }