java_进阶.泛型.set集合.第八天

本文介绍了Java中的泛型概念,通过示例展示了如何在ArrayList和LinkedList中使用泛型,以及泛型通配符<?, ? extends Number>和<?, ? super Number>的应用。还讲解了如何使用TreeSet进行自然排序和自定义比较器排序。
摘要由CSDN通过智能技术生成
  • 泛型: 即限制存入集合中元素的类型
public class Test02 {
    public static void main(String[] args) {
        //泛型方法的基本使用
        ArrayList<String> list = new ArrayList<>();
        list.add("发财树");
        list.add("常青树");
        list.add("梧桐树");
        list.add("槐花树");

        System.out.println(list);

        //调用toArray空参构造返回object类型数据
        Object[] objects = list.toArray();
        //调用方法传入数组,返回数组中元素字符串表示形式
        System.out.println(Arrays.toString(objects));

        //参数类型为数组类型,所以new出String类型传进去
        String[] strings = list.toArray(new String[list.size()]);
        System.out.println(strings);


    }
}
  • 泛型方法基本使用
public class Test07 {
    public static void main(String[] args) {

        ArrayList<String> methods = methods(new ArrayList<String>(), "万年青", "发财树", "鸭脚木", "吊篮");
        System.out.println(methods);
        ArrayList<Integer> methods1 = methods(new ArrayList<Integer>(), 12, 16, 18, 20);
        System.out.println(methods1);
    }

    public static <T>ArrayList<T> methods(ArrayList<T> list,T t1,T t2,T t3,T t4) {

        list.add(t1);
        list.add(t2);
        list.add(t3);
        list.add(t4);
        return list;
    }
}

  • 泛型通配符<?>
ublic class Test08 {
    public static void main(String[] args) {
        //泛型通配符使用
        ArrayList<Integer> String = new ArrayList<>();
        ArrayList<Object> object = new ArrayList<>();

        methods1(String);
        methods2(object);

    }

    public static < T >void methods1(ArrayList<? extends Number > list1) {
        System.out.println("extends只能传入小于或者等于");
    }
    public static < T >void methods2(ArrayList<? super Number > list2) {
        System.out.println("super只能传入大于或者等于");
    }
    
}
  • set集合:去除重复、存取无序、没有索引.不能使用普通fori循环、可以将元素按照规则进行排序

public class headmaster implements Comparable<headmaster> {

    private String anme;
    private int age;

    public headmaster() {
    }

    public headmaster(String anme, int age) {
        this.anme = anme;
        this.age = age;
    }

    public String getAnme() {
        return anme;
    }

    public void setAnme(String anme) {
        this.anme = anme;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "headmaster{" +
                "anme='" + anme + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(headmaster o) {
        //判断条件一,this代表即将传入的数据,o代表已经传入的数据
       int  ruselt =this.age-o.age;
       //判断条件二,利用码表进行姓名判断
         ruselt = ruselt == 0 ? this.anme.compareTo(o.anme) : ruselt;
         return ruselt;
    }
}

ublic class Test01 {
    public static void main(String[] args) {
        //自然排序
        TreeSet<headmaster> set = new TreeSet<>();

        headmaster s1 = new headmaster("王者荣耀",6);
        headmaster s2 = new headmaster("天天酷跑",5);
        headmaster s3 = new headmaster("消消乐",10);
        headmaster s4 = new headmaster("刺激战场",10);

        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        System.out.println(set);

    }
}

public class Test02 {
    public static void main(String[] args) {
        //比较器排序

        TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //条件一,按照字符长度进行排序
                int result = o1.length() - o2.length();
                //条件二,按照码表进行排序
                result = result == 0 ? o1.compareTo(o2) : result;
                return result;
            }
        });

        set.add("zhang");
        set.add("wang");
        set.add("li");
        set.add("la");

        //java默认自然排序,倘若默认排序满足不了需求可是使用比较器排序
        System.out.println(set);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值