自己在学习Java中,目前只学到了Collection集合的皮毛,来到这儿总结一番。废话不多说,入题吧!
在了解Collection集合之前,我们最好先知晓它的前世今生以及子孙后代们。
1.Collection集合全称是单列集合类的根接口。我在这儿一直喊他叫集合,就说明它是一种容器,用于存放一系列符合规格的某些元素。它有两个重要的子接口,分别是 java.util.List 和 java.util.Set 。其中, List 的特点是元素有序、元素可重复。 Set 的特点是元素无 序,而且不可重复。 List 接口的主要实现类有 java.util.ArrayList 和 java.util.LinkedList , Set 接口 的主要实现类有 java.util.HashSet 和 java.util.TreeSet 。而在这个家族中。Collection、List、Set是接口,其余的是类。多提一句,集合本身是一个工具,他们都存放在java.util包中,所以使用时需要导包。
Collection的使用方法
Collection是所有的单列集合类的父接口,所以它的使用方法可以继承到List 和 Set中。下面我就列出它的常用方法。
1.public boolean add(E e): 将给定的对象添加到集合中。返回值是一个boolean类型值 ,成功了是true,失败了是false。因为Collection集合中存放的元素是可重复的,所以可以说是存放元素只要符合条件,基本就是成功的,我们很少使用到(或我还没接触到)需要它的返回值的情况。
2. public boolean remove(E e):将指定元素删除。
3. public void clear(): 这个老牛逼了,清空整个集合,但是集合本身(容器)不会被删掉。
4. public int size():返回集合中元素的个数。
5. public boolean contains(E e):判断集合中是否包含有指定元素。对比起以前的数组,这个功能简直不要太给力了。
6.public boolean isEmpty():判断该集合是否为空,就是是否含有元素。
7.public Object[] toArray():将集合中的元素存放到数组中。因为数组中存放的数据类型是一致的,所以方法中使用的是Object来接受。需要注意的是,因为数组长度不可更改,所以更改成数组后,以及数组转成集合后,里面所包含的元素也就不可以增删了啊,只可以替代覆盖哦。
以下作为演示:
import java.util.ArrayList;
import java.util.Collection;
public class demo01_Collection集合 {
public static void main( String[] args ) {
// ArrayList 是Collection接口的子类,
//所以在这里通过新建一个ArrayList对象来调用父接口
Collection<String> col = new ArrayList<>();
//add方法 将元素添加到集合中去
col.add("三叉戟");
col.add("都神剑");
col.add("狂魔镰");
col.add("刑天斧");
col.add("虚空杖");
//咳咳,最近回归了大乐斗,前几天学了对象和接口,想着整个大乐斗单机版,所以有点儿着迷了
System.out.println(col);
//remov方法 删除集合中的目标元素,集合中没有该元素不会报错
col.remove("刑天斧");
System.out.println(col);
//contains方法 判断目标是否在集合中,返回值是boolean类型
col.contains("刑天斧");
// isEmpty 方法,判断集合中是否为空,返回值是boolean类型
col.isEmpty();
//size 返回集合中元素的个数,返回值是int类型
int size = col.size();
// toArray 方法,将集合返回到数组去
String[] arr = new String[5];
col.toArray(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
//clean 方法,将整个集合中的所有元素清楚,但是集合本身依然保留!
col.clear();
System.out.println(col);
}
}
Collection集合的遍历
既然学到了一个集合,学会了它的使用方式,怎么会缺的了它的遍历呢?在JDK中提供了一个温馨贴切的Iterator接口: java.util.Iterator(导包加1) 这个接口是用来遍历Collection集合的,它有个名称叫做迭代器。而作为遍历一个Collection集合的迭代器,也是有以下几个步骤的。
一:生成对应集合的迭代器。
二:判断集合中是否有下一个元素。
三:有的话,则将元素取出来。
示例代码:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class demo01_Iterator迭代器 {
public static void main( String[] args ) {
//创建集合
Collection<String> coll = new ArrayList<>(); //collection是一个抽象父接口,所以只好通过引用子类来实现了
coll.add("旺仔牛奶");
coll.add("AD钙奶");
coll.add("旺旺奶糖");
coll.add("好丽友");
coll.add("抹茶小饼干");
coll.add("好时巧克力");
// 创建集合对应的迭代器
Iterator<String> diedaiqi= coll.iterator();
//进行判断,是否有下一个元素,有的话才能执行拿取操作
while(diedaiqi.hasNext()){
String s = diedaiqi.next();
System.out.println(s);
}
}
}
迭代器的使用注意
因为迭代器的判断是如果有下一个,再拿取。所以迭代器在进行迭代自定义对象时容易出问题。详情可以参看它的原理:
迭代器是有指针的,当判断有一个元素时,进行拿取后,指针就会下移。如果你的自定义对象有多个属性时,就容易获取到下一个元素的某一属性了。表达能力有限,用代码表示。
新建的Person类
public class Person {
private String name;
private int age;
//构造空参
public Person( ) {
}
//构造有参
public Person( 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;
}
}
测试类:
package demo02_Iterator迭代器;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class demo02_Iterator的使用注意 {
public static void main( String[] args ) {
Person p1 = new Person("张三",23);
Person p2 = new Person("李四",24);
Person p3 = new Person("王五",25);
Person p4 = new Person("赵六",26);
//新建Collection集合
Collection<Person> coll = new ArrayList<>();
coll.add(p1);
coll.add(p2);
coll.add(p3);
coll.add(p4);
//创建对应的迭代器
/* Iterator<Person> it = coll.iterator();
//进行判断
while(it.hasNext()){
System.out.println("名字:"+it.next().getName()+"年龄:"+it.next().getAge());
//输出 名字:张三年龄:24
// 名字:王五年龄:26
}*/
//修正版
Iterator<Person> it = coll.iterator();
while(it.hasNext()){
Person p =it.next();
System.out.println("名字:"+p.getName()+"--"+"年龄:"+p.getAge());
}
}
}
在测试类中的第一次输出,大家会发现张三的年龄不是23了,而是24,并且跳过了李四等。这就是迭代器使用时需要注意的事项,可以多一步,给每个迭代对象起个名,再用自定义类的对象去调用迭代器的next()方法就可以了。详情请看代码中的修改部分
以上就是我对Collection集合的一个简单理解,当然Collection集合绝不止这么点内容,有空我会再说说List集合和Set集合。将这两个集合以及他们的子类讲解了,才算是大概的讲完了这个集合一家的故事。