集合类的特点:提供了一种存储空间可变的存储类型,存储的数据容量可以随时发生变化 集合的作用:存储和取出数据
集合都是接口,并不能直接创建对象并进行实例化,即不能直接使用,所以还需要用到实现类,来创建对象并进行实例化,如下
对于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集合的练习
xxxxxxxxxx
package 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集合常用方法的练习
xxxxxxxxxx
package 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集合遍历的练习
xxxxxxxxxx
package 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;
}
}
xxxxxxxxxx
package 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());
}
}
}