Java 设定通配符的下限

本文深入探讨了Java集合框架中TreeSet与泛型通配符的高级使用技巧,包括集合数据拷贝与自定义排序的实战案例。通过具体代码演示了如何利用泛型参数的上下界约束来增强代码的灵活性与安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 点睛

1 引入

Java集合框架中的TreeSet<E>有一个构造器用到了这种设定通配符下限的语法,语法如下所示:

TreeSet(Comparator<? super E> c)

二 实战——集合数据拷贝

1 代码

import java.util.*;

public class MyUtils
{
   // 下面dest集合元素类型必须与src集合元素类型相同,或是其父类
   public static <T> T copy(Collection<? super T> dest
         , Collection<T> src)
   {
      T last = null;
      for (T ele  : src)
      {
         last = ele;
         dest.add(ele);
      }
      return last;
   }
   public static void main(String[] args)
   {
      List<Number> ln = new ArrayList<>();
      List<Integer> li = new ArrayList<>();
      li.add(5);
      li.add(9);
      li.add(7);
      // 此处可准确的知道最后一个被复制的元素是Integer类型
      // 与src集合元素的类型相同
      Integer last = copy(ln , li);    // ①
      System.out.println(ln);
   }
}

2 运行

[5, 9, 7]

三 实战——排序应用

1 代码

import java.util.*;

public class TreeSetTest {
    public static void main( String[] args ) {
        // Comparator的实际类型是TreeSet的元素类型的父类,满足要求
        TreeSet<Integer> ts1 = new TreeSet<>(
                new Comparator<Object>() {
                    public int compare( Object first, Object second ) {
                        return (Integer) first > (Integer) second ? 1 : -1;  // 返回-1时first排在前面,返回1时候second排在前面
                        // return -1;  // 返回-1时,second排在前面
                    }
                });
        ts1.add(1);
        ts1.add(2);
        // Comparator的实际类型是TreeSet元素的类型,满足要求
        TreeSet<String> ts2 = new TreeSet<>(
                new Comparator<String>() {
                    public int compare( String first, String second ) {
                        return first.length() > second.length() ? -1
                                : first.length() < second.length() ? 1 : 0;
                    }
                });
        ts2.add("wa");
        ts2.add("hello");


        System.out.println(ts1);
        System.out.println(ts2);
    }
}

2 运行

[1, 2]

[hello, wa]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值