集合类的特点:提供了一种存储空间可变的存储类型,存储的数据容量可以随时发生变化 集合的作用:存储和取出数据
集合都是接口,并不能直接创建对象并进行实例化,即不能直接使用,所以还需要用到实现类,来创建对象并进行实例化,如下
对于Map双列集合,包含了HashMap实现类 对于List集合,包含了ArrayList实现类和LinkedList实现类 对于Set集合,包含了HashSet实现类和TreeSet实现类
Collection集合
Collection集合在java.util包下,所以使用之前需要导包
Interface Collection
Collection集合是一个接口,继承了Iterable
Collection集合是集合层次结构的根,表示一组被称为其元素的对象
JDK不提供此接口的任何直接实现:JDK提供了更具体的子接口的实现,如Set和List。简单理解就是Collection接口并没有具体的实现类,如果 Collection接口将来想要创建对象,就必须使用Collection接口的子接口Set或List的实现类来创建对象
总结: 1、Collection集合是单列集合的顶层接口,表示一组对象,这些对象也称为Collection接口的元素 2、JDK不提供此接口的任何直接实现,JDK提供更具体的子接口(Set和List)实现
如何创建Collection集合的对象 1、通过多态的方式 2、通过具体的实现类ArrayList。因为ArrayList实现了List接口,而List接口继承自Collection接口
创建Collection集合的对象之后,如何添加数据呢 通过add()方法添加数据,add方法的参数类型跟我们写的泛型的数据类型要一致
Collection集合的练习
xxxxxxxxxxpackage ch14;
import java.util.ArrayList;import java.util.Collection;
public class a_2_1测试 {
public static void main(String[] args) {
//按照多态的方式创建Collection集合的对象 Collection<String> c = new ArrayList<String>();//<>里面的是泛型,比如这行就表示Collection集合将来存储的是String类型的数据
//添加数据,或叫添加元素。通过add()方法添加数据,add方法的参数类型跟我们写的泛型的数据类型要一致 c.add("hello"); c.add("world"); c.add("java"); //往集合中添加了3个数据,或叫3个元素
//输出集合对象 System.out.println(c);//输出[hello, world, java] //因为上面的c是new出来的,所以按理说这行会输出地址值,但是却输出了具体的内容。说明ArrayList集合中重写了toString方法
}}
Collection集合常用方法
| 方法名 | 说明 |
|---|---|
| boolean add(E e) | 添加元素 |
| boolean remove(Object o) | 从集合中移除指定的元素 |
| void clear() | 清空集合中的元素 |
| boolean contains(Object o) | 判断集合中是否存在指定的元素 |
| boolean isEmpty() | 判断集合是否为空 |
| int size() | 集合的长度,也就是集合中元素的个数 |
Collection集合常用方法的练习
xxxxxxxxxxpackage ch14;
import java.util.ArrayList;import java.util.Collection;
//Alt+7 在查看源码时,会打开一个窗口,能够看到类的所有信息
public class a_3_1测试 {
public static void main(String[] args) {
//先创建集合对象。按照多态的方式创建Collection集合的对象 Collection<String> c = new ArrayList<String>();//<>里面的是泛型,比如这行就表示Collection集合将来存储的是String类型的数据
//------------------------------------------------------------------------------------------------------------------
//boolean add(E e) 添加元素。这个方法会返回一个boolean类型的结果 System.out.println(c.add("hi"));//输出true,说明添加元素成功 System.out.println(c.add("你"));//输出true,说明添加元素成功 System.out.println(c.add("们"));//输出true,说明添加元素成功 //由于调用add方法永远都返回true,所以我们通常的写法如下 c.add("好"); c.add("呀"); c.add("呀"); System.out.println(c);//输出集合对象 System.out.println("----------------------");
//------------------------------------------------------------------------------------------------------------------
//boolean remove(Object o) 从集合中移除指定的元素。这个方法会返回一个boolean类型的结果 System.out.println(c.remove("呀"));//输出true,说明移除元素成功。注意有两个重复的元素只移除其中的一个 System.out.println(c.remove("我"));//输出false,说明移除元素失败,原因是不存在这个元素 System.out.println(c);//输出集合对象 System.out.println("----------------------");
//------------------------------------------------------------------------------------------------------------------
//void clear() 清空集合中的元素。因为clear方法的返回值是void,所以直接用对象调用就可以了 //c.clear(); //这行先注释,不然下面的代码不好演示。需要可自行解开注释 System.out.println(c);//输出集合对象 System.out.println("----------------------");
//------------------------------------------------------------------------------------------------------------------
//boolean contains(Object o) 判断集合中是否存在指定的元素。 System.out.println(c.contains("hi")); //输出true,即存在 System.out.println(c.contains("hello")); //输出false,即不存在 System.out.println("----------------------");
//-------------------------------------------------------------------------------------------------------------------
//boolean isEmpty() 判断集合是否为空 System.out.println(c.isEmpty()); //输出false,即集合不为空 System.out.println("----------------------");
//-------------------------------------------------------------------------------------------------------------------
//int size() 集合的长度,也就是集合中元素的个数 System.out.println(c.size()); //输出5,即集合中有5个元素 System.out.println("----------------------");
//-------------------------------------------------------------------------------------------------------------------
//System.out.println(c);//输出集合对象,即输出添加的元素。Collection集合可以存储重复元素
}}
Collection集合的遍历
Iterator:是一个迭代器,是集合的专用遍历方式,是Collection集合的一个方法。该迭代器是一个接口,在java.util包下,该迭代器也有泛型, Iterator里面有next方法,next方法用来返回迭代中的下一个元素。 Iterator里面有hasNext方法,hasNext方法用来做判断的,如果迭代具有更多元素,则返回true,没有元素则返回false
Iterator
迭代器中的方法如下 1、E next():返回迭代中的下一个元素,即获取元素的 2、boolean hasNext():如果迭代具有更多元素,则返回true,即做判断的
Collection集合遍历的练习
xxxxxxxxxxpackage ch14;
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;
public class a_4_1测试 {
public static void main(String[] args) {
//创建集合对象 Collection<String> c = new ArrayList<String>(); Collection<String> d = new ArrayList<String>(); Collection<String> e = new ArrayList<String>();
//添加元素 c.add("hello"); c.add("world"); c.add("java");
//添加元素 d.add("hello2"); d.add("world2"); d.add("java2");
//添加元素 e.add("hello3"); e.add("world3"); e.add("java3"); e.add("学会哦3"); e.add("学会哦3"); e.add("学会哦3"); e.add("学会哦3");
//得到集合的迭代器 //右边利用多态的方式得到左边的对象,然后我们就可以通过it来使用里面的方法 Iterator<String> it = c.iterator(); //左边的泛型要和12行里集合的泛型一致 Iterator<String> it2 = d.iterator(); //左边的泛型要和13行里集合的泛型一致 Iterator<String> it3 = e.iterator(); //左边的泛型要和14行里集合的泛型一致
//获取元素 System.out.println(it.next()); //输出第一个元素hello System.out.println(it.next()); //输出第二个元素world System.out.println(it.next()); //输出第三个元素java //System.out.println(it.next()); //报错,因为我们集合中只有3个元素。NoSuchElementException:表示被请求的元素不存在 System.out.println("-------------------"); //如何解决上面获取元素的报错,如下
//使用hasNext()方法,即我们在获取元素之前先判断一下。同样也是输出4次,看会不会想上面那样报错。结论是不报错 if(it2.hasNext()){ //如果判断集合中有元素,就执行下面的代码 System.out.println(it2.next()); //然后再获取元素 } if(it2.hasNext()){ System.out.println(it2.next()); } if(it2.hasNext()){ System.out.println(it2.next()); } if(it2.hasNext()){ //当没有元素时,hasNext方法会返回false,即阻止了继续执行下去 System.out.println(it2.next()); } System.out.println("-------------------");
//总结:如果直接使用next(),会因元素不足而报错。所以要先使用hasNext方法判断一下,再用next方法。 //问题:当我们集合中有很多元素时,每次都要写一次代码太麻烦,所以我们需要用while循环优化一下。如下//-----------------------------------------------------------------------------------------------------------
while(it3.hasNext()){ //如果有元素就可以不断执行下去,直到把元素都用完 //System.out.println(it3.next()); //这行还可以再优化一下,如下 String s = it3.next(); //上面是直接输出。这里先拿到字符串元素,方便以后对字符串元素进行其他操作 System.out.println(s); } }}
Collection集合存储学生对象并遍历
需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
思路: 1、定义学生类 2、创建Collection集合对象 3、创建学生对象 4、把学生添加到集合 5、遍历集合(使用迭代器的方式实现)
Collection集合存储学生对象并遍历的练习
package ch14;
public class a_5_1Student {
//成员变量 private String name; private int age;
//无参构造方法 public a_5_1Student() { }
//带参构造方法 public a_5_1Student(String name, int age) { this.name = name; this.age = age; }
//成员变量对应的get、set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
xxxxxxxxxxpackage ch14;
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;
public class a_5_2测试 {
public static void main(String[] args) {
//创建collection集合对象 Collection<a_5_1Student> c = new ArrayList<a_5_1Student>(); //注意泛型要写学生类
//创建学生对象 a_5_1Student s1 = new a_5_1Student("张三", 18); a_5_1Student s2 = new a_5_1Student("李四", 19); a_5_1Student s3 = new a_5_1Student("王五", 20);
//把学生添加到集合 c.add(s1); c.add(s2); c.add(s3);
//遍历集合,使用迭代器的方式 Iterator<a_5_1Student> it = c.iterator(); //通过集合对象调用iterator方法,得到迭代器对象 while (it.hasNext()) { //通过迭代器对象的hasNex方法,判断集合里是否有元素 a_5_1Student s = it.next();//通过迭代器对象的next方法,获取集合里的每一个元素 System.out.println(s.getName() + "," + s.getAge()); }
}}