目录
集合类概述
Collection接口
Collection接口概述
Collection接口成员方法
1.添加功能
2.删除功能
3.判断功能
4.获取长度
5.求交集功能
6.集合的遍历
Iterator接口
Iterator接口概述
Iterator接口成员方法
集合类概述
a.为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。
b.数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
c.集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
Collection接口 Collection接口概述
Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
Collection接口成员方法
(由于Collection是一个接口,所以无法被实例化,需要它的子类来进行接口多态的方式实例化,这里暂时用ArrayList来示范。)
1.添加功能
boolean add(E e) 确保此集合包含指定的元素(可选操作)
import java.util.ArrayList;import java.util.Collection;public class CollectionTest1 { public static void main(String[] args) { Collection c = new ArrayList(); //boolean add(E e)确保此集合包含指定的元素(可选操作) System.out.println(c.add(12)); //输出true,表示该元素成功插入到对象c里 System.out.println(c.add("help")); c.add(2.33); c.add(12); System.out.println(c); //调用AbstractCollection类中的toString()方法,所以不会输出地址值 }}
boolean addAll(Collection c) 将指定集合中的所有元素添加到此集合(可选操作)
//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hive"); c1.add("spark"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); //boolean addAll(Collection c) 将指定集合中的所有元素添加到此集合(可选操作) c1.addAll(c2); //将c2集合中的元素添加到c1里 System.out.println(c1); System.out.println(c2);
2.删除功能
boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)
//boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作) c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c); c.remove("hello");//删除指定元素(如果有重复只移除一个符合条件的元素) System.out.println(c);
boolean removeAll(Collection c) 删除指定集合中所包含的所有此集合的元素(可选操作)
//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hive"); c1.add("spark"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); //boolean removeAll(Collection c) 删除指定集合中所包含的所有此集合的元素(可选操作) c1.removeAll(c2); //将c1集合里包含c2集合的元素删除 System.out.println(c1); System.out.println(c2);
void clear() 从此集合中删除所有元素(可选操作)
//void clear() 从此集合中删除所有元素(可选操作) c.add(121); c.add("eee"); System.out.println(c); c.clear(); //删除 System.out.println(c);
3.判断功能
boolean contains(Object o) 如果此集合包含指定的元素,则返回true
c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c.contains("hello")); //包含就输出true,否则false
boolean containsAll(Collection c) 如果此集合中包含指定集合中的所有元素,则返回true
//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hello"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); System.out.println(c1.containsAll(c2)); //包含返回true,否则false
boolean isEmpty() 如果此集合不包含元素,则返回true
//boolean isEmpty() 如果此集合不包含元素,则返回true c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c.isEmpty()); //空输出true,非空false
4.获取长度
int size() 返回此集合中的元素数
//int size() 返回此集合中的元素数 c.add(121); c.add("eee"); c.add("hello"); c.add("bigdata"); System.out.println(c.size()); //这里有四个元素,输出为4
5.求交集功能
boolean retainAll(Collection c) 仅保留此集合中包含在指定集合中的元素(可选操作)
//创建集合对象 Collection c1 = new ArrayList(); //向集合中添加元素 c1.add("java"); c1.add("hadoop"); c1.add("hello"); //创建另一个集合对象 Collection c2 =new ArrayList (); c2.add("hello"); c2.add("java"); //boolean retainAll(Collection c) 仅保留此集合中包含在指定集合中的元素(可选操作) c1.retainAll(c2); //c1保留与c2集合相交部分元素 System.out.println(c1); System.out.println(c2);
6.集合的遍历
Object[] toArray() 返回一个包含此集合中所有元素的的数组
把集合转成数组,可以实现集合的遍历
//创建集合对象 Collection c = new ArrayList(); //添加元素 c.add("ee"); c.add("sds"); c.add("rrr"); c.add("tet"); //集合转换为数组 Object[] objects = c.toArray(); //遍历数组 for(int i=0;i
例:用集合遍历学生信息
a.首先创建学生的标准类(不会的可以去看看前面 面向对象——封装 )
class Student{ private String name; private int age; public Student() {} public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + ''' + ", age=" + age + '}'; }}
b.然后创建集合遍历
public class CollectionTest3 { public static void main(String[] args) { //创建集合对象 Collection c =new ArrayList(); //创建学生对象 Student s1 =new Student("qwee",20); Student s2 =new Student("sdfs",30); Student s3 =new Student("adasfa",40); //将对象添加进入集合 c.add(s1); c.add(s2); c.add(s3); //转换为数组 Object[] objects = c.toArray(); //遍历数组 for(int i=0;i< objects.length;i++){ // System.out.println(objects[i]); 普通输出 Student student = (Student) objects[i]; //向下转型 System.out.println(student.getName()+"————"+student.getAge()); } }}
c.结果
Iterator接口 Iterator接口概述
对 collection 进行迭代的迭代器
依赖于集合而存在
Iterator接口成员方法
a. Iterator
b. E next() 返回迭代中的下一个元素
例:迭代器遍历字符串
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class CollectionTest4 { public static void main(String[] args) { //创建集合对象 Collection c =new ArrayList(); //添加元素 c.add("hadoop"); c.add("hive"); c.add("java"); c.add("bigdata"); //获取集合c的迭代器对象 //Iterator
c. boolean hasNext() 如果迭代中还有元素,返回true(判断迭代中海有没有元素)
用上面的 E next() 方法多调用一次超过集合拥有元素数量就会报错,所以可以用hasnext()改进。
//boolean hasNext() 判断迭代中还有没有元素 if (iterator.hasNext()){ System.out.println(next); //如果这样输出,每验证一次需重新输出,如果元素过多太繁琐,需改进 } //由于不知道需要循环输出多少次,用while循环改进 while(iterator.hasNext()){ System.out.println(iterator.next()); }
遍历结果
若想继续使用元素的方法(如查看长度)需向下转型
while(iterator.hasNext()){ Object next = iterator.next(); //向下转型,添加的数据都是String类型的,所以转String类 String s =(String) next; System.out.println(s+" 长度:"+s.length()); }
同样,我们继续利用迭代器来遍历自定义的对象(学生类同上,需先创建公共类)
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class CollectionTest5 { public static void main(String[] args) { //创建集合对象 Collection c= new ArrayList(); //创建学生对象 Student s1 =new Student("w3da3",24); Student s2 =new Student("q32423",23); Student s3 =new Student("sdf313",34); //添加到集合 c.add(s1); c.add(s2); c.add(s3); //获取迭代器对象 Iterator iterator = c.iterator(); //遍历迭代器对象,获取每一个元素 while(iterator.hasNext()){ Object next = iterator.next(); //向下转型,这里是Student类,所以转Student类 Student s =(Student) next; //转型后就能调用元素的方法了 System.out.println(s.getName()+"_____"+s.getAge()); } }}
( 不推荐用for循环,如果你非要使用for循环,也能使用for循环遍历,没有while循环可读性高)
for (Iterator iterator1 = c.iterator();iterator1.hasNext();){ Object next = iterator1.next(); Student s =(Student) next; System.out.println(s.getName()+"_____"+s.getAge()); }
注意,同一个迭代器只能遍历一次,多次遍历没有效果。应为遍历一次指针指向末尾(如while循环后,再使用while循环无第二次输出结果,只有第一次结果)