【Java_12】Collection、泛型

2021-02-04 10:05:36 浏览数 (1)

一、Collection

1. 集合框架
代码语言:javascript复制
Collection
    - List
        - ArrayList
        ···
    - Set
        - TreeSet
        ···
2. 常用方法
代码语言:javascript复制
① add(E e)
    将数据添加到集合。
② remove(E e)
    将数据从集合中移除
③ contains(E e)
    判断集合中是否包含该数据
④ size()
    获取集合的长度
⑤ clear()
    清空集合
⑥ toArray()
    将集合转为数组
⑦ isEmpty()
    判断集合是否为空
⑧ Collections.shuffle(Collection)
    将集合乱序排列
3. 迭代器(Iterator)
代码语言:javascript复制
① iterator()
    获取迭代器
② next()
    获取下一个元素
③ hasNext()
    判断下一个元素是否存在
④ 注意
    * 迭代器中不允许修改集合长度
⑤ 示例
    //创建迭代器
    Iterator<String> iterator = coll.iterator()
    //判断集合中是否有下一个元素
    while (iterator.hasNext()) {
        //取出下一个元素,next后移一位
        String next = iterator.next();
         System.out.println(next);
    }
4. 增强for
代码语言:javascript复制
①格式
    for(元素的数据类型  变量 : Collection集合/数组){ 
        ···
    }
② 注意
    * foreach 底层也是迭代器故在遍历过程中不能改变集合长度
③ 示例
    //增强for循环
    for (String s : coll) {
        System.out.println(s);
    }
5. 示例
代码语言:javascript复制
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class DemoCollection {
    public static void main(String[] args) {
        //多态,创建集合
        Collection<String> coll = new ArrayList<>();
 
        //添加字符串进集合
        coll.add("华为");
        coll.add("联想");
        coll.add("神舟");
        coll.add("小米");
        coll.add("中兴");
 
        System.out.println(coll);   //[华为, 联想, 神舟, 小米, 中兴]
 
        //创建迭代器
        Iterator<String> iterator = coll.iterator();
        boolean b = false;
        //判断集合中是否有下一个元素
        while (iterator.hasNext()) {
            //取出下一个元素,next后移一位
            String next = iterator.next();
            if ("java".equals(next)) {
                b = true;
            }
        }
 
        if (b) {
            coll.add("good");
        }
 
        //判断是否包含 "华为"
        System.out.println(coll.contains("华为"));    //true
 
        //移除 "联想"
        System.out.println(coll.remove("联想"));   //true
 
        System.out.println(coll);   //[华为, 神舟, 小米, 中兴]
 
        //增强for循环
        for (String s : coll) {
            System.out.println(s);
        }
 
        //清空集合
        coll.clear();
 
        //判断集合是否为空
        System.out.println(coll.isEmpty());   //true
    }
}

二、泛型

1. 泛型介绍
代码语言:javascript复制
* 泛型是一种未知数据类型,当我们不知道使用什么数据类型是就可以使用泛型;也可以看成是一个变量,用来接收数据类型。
* 泛型避免了类型转换的错误,一旦确定泛型的类型,那么这个类就只能存储这个类型,不需要强转。
* 泛型不能直接 new 对象
* 泛型只能是引用类型
2. 含有泛型的类
代码语言:javascript复制
① 示例
    //含有泛型的类
    public class Demo<E> {
        private E value;

        public E getValue() {
            return value;
        }
 
        public void setValue(E value) {
            this.value = value;
        }
    }
    
    //测试类
    public class Test {
        public static void main(String[] args) {
            //确定泛型
            Demo<String> s = new Demo<>();
 
            s.setValue("hello");
 
            System.out.println(s.getValue());
        }
    }
② 在创建对象是需要确定泛型的类型
3. 含有泛型的方法
代码语言:javascript复制
① 示例
    public class Test {
        public static void main(String[] args) {
            //确定泛型
            method(100);    //自动装箱 Integer
            method("nihao");
            method(2.5);    //自动装箱 Double
        }

        //含有泛型的方法
        public static <E> void method(E e) {
            System.out.println(e);
        }
    }
4. 含有泛型的接口
代码语言:javascript复制
① 示例
    //含有泛型的接口
    public interface Demo1<E> {
        abstract void method(E e);
    }
    
    //第一种方式,在声明时确定泛型
    public class Test implements Demo1<String>{
 
        @Override
        public void method(String s) {
            System.out.println(s);
        }
    }
    
    //第二种方式,在创建对象时确定泛型
    public class Demo2<E> implements Demo1<E> {
        @Override
        public void method(E e) {
            System.out.println(e);
        }
    }
    
    public class Test{
        public static void main(String[] args) {
            Demo2<String> d = new Demo2<>();
        }
    }
5. 泛型通配符
代码语言:javascript复制
① <?>
    泛型可以是任意类型
② <? extends E>
    泛型是能是E的子类或自己
③ <? super E>
    泛型只能是E的父类或自己

0 人点赞