Java入门-11、Collection类及泛型的使用

Collection类:

集合 :集合是 java 中提供的一种容器,可以用来存储多个数据。
 
集合和数组的区别:
  1. 数组的长度固定,而集合的长度是可变的
  2. 数组中存储的元素的数据类型是相同的,可以存储任意类型的数据,集合存储的时引用数据类型
查看Collection的源码可以知道,Collection是单列集合类的根接口,其有两个重要常见的子接口分别是 java.util.List java.util.Set
其中 List 的特点是元素有序、元素可重复。 Set 的特点是元素不可重复。
 
Collection常用方法:(具体参照java api文档)
public boolean add(E e) : 把给定的对象添加到当前集合中 。
public void clear() :   清空集合中所有的元素。
public boolean remove(E e) : 把给定的对象在当前集合中删除。
public boolean contains(Object obj) : 判断当前集合中是否包含给定的对象。
public boolean isEmpty() : 判断当前集合是否为空。
public Object[] toArray() : 把集合中的元素,存储到数组中
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionDemo01 {
    public static void main(String[] args) {
        //多态  父类引用指向子类对象
        Collection<String> collection = new ArrayList<>();
        //往集合里添加对象
        collection.add("张三");
        collection.add("李四");
        collection.add("王五");
        System.out.println(collection);//集合已经重写了toSting方法

        //remove方法,删除了对象李四则返回true否则返回false
        boolean remove = collection.remove("李四");
        System.out.println(remove);
        //contains判断集合中是否包含某个对象,包含则返回true 否则就返回false
        boolean b = collection.contains("张三");
        System.out.println(b);

        //isEmpty集合判空 空则返回true 否则返回false
        boolean empty = collection.isEmpty();
        System.out.println(empty);


        collection.add("老刘");
        collection.add("老王");


        //集合遍历
        for (String s : collection) {
            System.out.println(s);
        }
        System.out.println("----------------------------");
        //使用迭代器遍历集合元素 返回在此 collection 的元素上进行迭代的迭代器,关于元素返回的顺序没有任何保证
        Iterator<String> it = collection.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println("----------------------------");
        //toArray返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同
        String[] str = collection.toArray(new String[0]);
        for (int i = 0; i < str.length; i++) {
            System.out.println(str[i]);
        }
    }
}

泛型:

不使用泛型:集合是可以存储任意类型的对象,当没有明确的类型要求的时候,对象在存储后将默认成Object类型,当我们取对象使用的时候,就需要进行强制转换。当对象的数据类型不一时,强转的时候会出现java.lang.ClassCastException,类型转换异常。

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

public class CollectionDemo02 {
    public static void main(String[] args) {
        //不使用泛型 不限制存储对象的数据类型
        Collection coll = new ArrayList();
        coll.add(2);
        coll.add("小红");
        coll.add("小白");

        //迭代器迭代
        Iterator it = coll.iterator();
        while(it.hasNext()){
            //将Object对象强转成String
            String s =(String) it.next();
            System.out.println(s);
        }
    }
}

使用泛型:

好处:将运行时期的ClassCastException,转移到了编译时期变成了编译失败。 避免了类型强转的麻烦。

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

public class CollectionDemo3 {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("张三");
        coll.add("李四");
        //将运行时期的ClassCastException,转移到了编译时期变成了编译失败
        //coll.add(0);//直接报错

        Iterator<String> it =coll.iterator();
        
        while(it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }
    }
}
含有泛型的方法
 
定义时可以不确指定泛型的类型,创建对象的时候才指定。
class AA {
    //使用泛型,类型可以不明确
    //好处:用来灵活地将数据类型应用到不同的类、方法、接口当中,将数据类型作为参数进行传递
    public <E> void show(E e) {
        System.out.println(e.getClass());
    }
    public <E> E show2(E e) {
        return e;
    }
}

public class CollectionDemo04 {
    public static void main(String[] args) {
        // 创建对象
        AA aa= new AA();
        //调用show方法,创建的String类型对象,所以在创建对象才确定泛型,数据类型为String
        aa.show("hello");
        //数据类型为Integer
        aa.show(10);
    }
}

泛型通配符

在不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo05 {
    public static void main(String[] args) {
        Collection<String> coll =new ArrayList<>();
        coll.add("张三");
        coll.add("李四");
        method(coll);

        Collection<Integer> coll1=new ArrayList<>();
        coll1.add(20);
        coll1.add(30);
        method(coll1);
    }

    public static Collection<?> method(Collection<?> collection){
        System.out.println(collection);
        return collection;
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TorlesseLiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值