【Java学习】Collection集合、泛型

在这里插入图片描述
所有单列集合的最顶层的接口,里面定义了所以单列集合共性的方法
任意的单列集合都可以使用Collection接口中的方法
共性方法:

    public boolean add(E e): 把给定的对象添加到当前集合当中
	返回值是一个boolean值,一般都返回true,所以可以不用接收
    public void clear(): 清空集合当中所以的元素,但是不删除集合,集合还存在

    public boolean remove(E e): 把给定的对象在当前集合中删除
    返回值是一个boolean值,集合中存在元素,删除元素,返回true
	集合不存在元素,删除失败,返回false

    public boolean contains(E e): 判断当前集合中是否包含给定的对象
                                包含返回true,不包含返回false
    public boolean isEmpty(): 判断当前集合是否为空。
    public int size(): 返回集合当中元素的个数
    public Object[] toArray(): 把集合当中的元素,存到数组中

Iterator接口

迭代器(对集合进行遍历)
常用的方法:
boolean hasNext() 如果有元素可以迭代,则返回true
判断集合中还有没有下一个元素,有返回true,没有返回false
E next() 返回迭代的下一个元素
取出的集合的下一个元素
Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
Collection 接口中有个方法,iterator(),这个方法返回的就是迭代器的实现类对象
Iterator iterator() 返回在此collection的元素上进行迭代的迭代器

迭代器的使用步骤:
    1.使用集合当中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
    2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
    3.使用Iterator接口中的方法next取出集合中的下一个元素

迭代器取出集合中元素的代码,是一个重复的过程
所以我们使用循环优化
不知道集合中有多少元素,使用while循环
循环结束条件,hanNext方法返回false

public class Demo01Iterator {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();

        coll.add("姚明");
        coll.add("科比");
        coll.add("麦迪");
        coll.add("詹姆斯");
		Iterator<String> it = coll.iterator();
		while (it.hasNext()) {
		            String e = it.next();
		            System.out.println(e);
		        }
	}
}

增强for循环:底层使用的也是迭代器,使用for循环格式,简化了迭代器的书写
Collection<E>extends Iterable<E>:所以的单列集合都可以使用增强for
public interface Iterable<T>实现这个接口允许对象成为"foreach"语句的目标
格式:

for(集合的数据类型 变量名:集合名){
    ...
}
import java.util.ArrayList;

public class Demo02Foreach {
    public static void main(String[] args) {
        // 集合的遍历
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("ccc");
        for (String str: arrayList) {
            System.out.println(str);
        }


        // 数组的遍历
        int[] arr = {1, 2, 3, 4};
        for (int i : arr) {
            System.out.println(i);
        }
    }

}

泛型

package cn.sytest.day10.demo03;

import java.util.ArrayList;
import java.util.Iterator;

public class Demo01Generic {
    public static void main(String[] args) {

        show02();


    }
    /*
    创建集合对象,使用泛型
    好处:
        1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
        2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候就会报错)
    弊端:
        泛型是什么类型,只能存储什么类型的数据

     */

    private static void show02() {
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
    }

    /*
     创建集合对象,不使用泛型
            好处:
                集合不适用泛型,默认的类型就是Object类型,可以存储任意类型的数据
            弊端:
                不安全,会引发异常
     */
    private static void show01() {
        ArrayList list = new ArrayList();
        list.add("abc");
        list.add(1);
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);

            // ClassCastException
            String s = (String) obj;
            System.out.println(s.length());
        }
    }
}

定义了一个含有泛型的类,模拟ArrayList集合
泛型是一个未知的数据类型,当我们不确定什么数据类型的时候,可以使用泛型
泛型可以接收任意数据的类型,可以使用Integer,String,Student
创建对象的时候确定泛型的数据类型

public class GenericClass<E> {
    private E name;

    public E getName() {
        return name;
    }

    public void setName(E name) {
        this.name = name;
    }
}

public class Demo02GenericClass {
    public static void main(String[] args) {
        GenericClass gc = new GenericClass();
        gc.setName("只能说字符串");

        Object obj = gc.getName();
        // 创建GenericClass对象,泛型使用Integer类型
        GenericClass<Integer> gc2 = new GenericClass<>();
        gc2.setName(2);
        Integer name = gc2.getName();
        System.out.println(name);

        // 创建GenericClass对象,泛型使用String类型
        GenericClass<String> gc3 = new GenericClass<>();
        gc3.setName("张三");
        String s = gc3.getName();
        System.out.println(s);
    }
}


发布了19 篇原创文章 · 获赞 20 · 访问量 725

猜你喜欢

转载自blog.csdn.net/sy140823/article/details/104783314