Java 集合15 泛型的使用

在学习集合之初,查看API时 就有看见

Interface Collection<E>//带有<E>

: 接口(或者是类上)定义了一个参数,这就叫做泛型参数 。E 就是变量(这个变量就是传进来的元素的类型)
例如: List - - (在创建集合时) List :传入的元素是字符串型的

       boolean   add(E e)  //例如添加元素的函数,E 就是我们传进来的String   

迭代器也带有泛型参数/Collection 的几个主要的子接口也带有泛型参数//Comparator 也带泛型参数,泛型在集合中使用的最多。


练习:
一:字符串唯一且有序(自然排序)

package Collection;
import java.util.*;
//泛型:在创建集合时,规定集合中所能存入的元素类型//集合提供了这样的传参口
public class GenericDemo_Fanxing {
    public static void main(String[] args){
        //使元素 (字符串)唯一并且有序
        Set<String> set = new TreeSet<String>();
        //添加元素
        set.add("asihd");
        set.add("hdwh");
        set.add("fu9qu");
        //获取元素
        for(Iterator <String>  it = set.iterator();it.hasNext();){
            String str = it.next();//不需要强转,但是要使用特有方法还是要进行类型转化
            System.out.println(str+"  "+str.length());//获取元素并得到字符串的长度
        }
    }
}

运行结果:
asihd 5
fu9qu 5
hdwh 4

二:字符串唯一且按照长度由短到长排序

package Collection;
import java.util.*;
//泛型:在创建集合时,规定集合中所能存入的元素类型//集合提供了这样的传参口
public class GenericDemo_Fanxing {
    public static void main(String[] args){
        //使元素 (字符串)唯一并且有序
        Set<String> set = new TreeSet<String>(new Comparator<String>() {//使用匿名内部类
            @Override
            public int compare(String o1, String o2) {//方法中的参数类型也要相应的变化
                int temp = o1.length()-o2.length();
                return temp==0?o1.compareTo(o2):temp;
            }
        });
        //添加元素
        set.add("asihd");
        set.add("hdwh");
        set.add("fu9qu");
        //获取元素
        for(Iterator <String>  it = set.iterator();it.hasNext();){
            String str = it.next();//不需要强转,但是要使用特有方法还是要进行类型转化
            System.out.println(str+"  "+str.length());//获取元素并得到字符串的长度
        }
    }
}

Comparator 这个类在定义时:
Comparator
方法:compare(T o1 , T o2){}


泛型擦除 :
泛型是给编译器使用的,在编译之后泛型也就没什么用了(也就没有了)在我们所写的 xxx.java 文件中,给了泛型参数,例如,在编译时,编译器会带着这个类型,去查看你向集合中添加的元素是否都是这个类型,如果不是,则编译出错(无法通过编译);如果只有这个类型,则编译通过,在编译结束生成的 xxx.class 文件中 是没有泛型的。
(泛型的使用减少了安全问题)

————————————————————————————————

猜你喜欢

转载自blog.csdn.net/Stitch__/article/details/82529952