大数据Java基础DAY16——集合(Collection,Iterator接口)

目录

集合类概述

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<objects.length;i++){
          //  System.out.println(objects[i]);
            // 若想获取每一个元素的长度,需向下转型,因为object中没有length方法,子类为String类。
            String s =(String) objects[i];
            System.out.println(s+" 长度:"+s.length());
        }

 例:用集合遍历学生信息

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<E> iterator()返回此集合中的迭代器  (它是Collection集合遍历的专有方式

 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<E> iterator() 返回此集合中的元素的迭代器
        Iterator iterator = c.iterator();
        //System.out.println(iterator);//不能直接输出,iterator的实现类中没有toString方法,输出是地址值

        //E next() 返回迭代中的下一个元素
        Object next = iterator.next();

        System.out.println(next);  //输出 hadoop
        System.out.println(iterator.next());  //输出hadoop下一个元素hive,以此类推,超出集合元素数量会报错
        System.out.println(iterator.next());
        System.out.println(iterator.next());
    }
}

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循环无第二次输出结果,只有第一次结果)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值