Java泛型面试题:List泛型三者区别

本文深入探讨了Java中List、List<Object>和List<T>的区别,通过实例讲解了不同类型List的使用场景,包括泛型的赋值、查询、移除等操作,以及带通配符的泛型集合特性。

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

List和List<Object>和List<T>三者区别


    public static void main(String args[]) {

     List list1=new ArrayList();

     List<Object> list2=new ArrayList();

     List<Integer> list3=new ArrayList();

     list3=list1; //list1 不带泛型 可以赋值给 list2

     // list3=list2;//list2 是Object类型的不可以赋值给Integer类型的泛型集合

        //带通配符的泛型集合
        List<?> list4=new ArrayList<>();
        //list4.add("2222");//不能添加
        list4.get(0);//可以查询
        list4.remove(0);//可以移除

    }

### Java 面试题及解答 #### 1. 编译器要将擦除,为什么还需要使用? 尽管编译器会执行类擦除操作,即在运行时移除所有的信息并替换为 `Object` 类,但这并不意味着可以简单地用 `Object` 来替代的主要优势在于提供更强的类安全性更好的可读性。 - **类安全性**:可以在编译期捕获类错误,减少运行时异常的发生。例如,在不使用的情况下,向集合中添加不同类对象不会引发任何警告;而在使用后,则会在尝试插入不符合类的元素时报错[^1]。 - **代码简洁度与易维护性**:利用可以使代码更加通用化模块化,从而提高开发效率以及降低后期维护成本。比如定义一个工具函数处理多种数据结构而不必针对每种情况单独编写版本。 ```java // 使用 Object 的例子 List list = new ArrayList(); list.add("string"); String s = (String) list.get(0); // 这里可能会抛出 ClassCastException 异常 // 使用的例子 List<String> stringList = new ArrayList<>(); stringList.add("string"); String str = stringList.get(0); // 不需要强制转换, 更加安全可靠 ``` #### 2. 如何理解Java中的通配符? Java 中引入了两种主要形式的通配符——无界通配符 (`?`) 有界通配符 (`<? extends T>` 或 `<? super T>`): - **无界通配符**:表示未知的具体类,通常用于只读场景下声明容器变量; - **上界通配符**:指定某个特定父类及其子类作为实际参数类范围; - **下界通配符**:限定具体类必须是给定类或其祖先之一。 这些机制使得我们可以写出更灵活且健壮的应用程序逻辑,同时也增强了 API 设计上的表达能力。 ```java public static void printCollection(Collection<?> c){ for(Object e : c){ System.out.print(e + " "); } } ``` #### 3. 方法如何定义? 除了类级别的外,还可以创建独立于实例存在的静态成员方法,并为其赋予自己的类形参列表。这被称为“方法”。语法如下所示: ```java <T> 返回值类 方法名(参数列表); ``` 其中 `<T>` 表明这是一个带有单个类参数的方法签名。如果存在多个这样的占位符,则它们之间需要用逗号分隔开。 下面是一个简单的示例展示了如何实现一个接受任意两个同质元素并返回较大者比较器接口实现方式: ```java public class Util { public static <T extends Comparable<T>> T max(T a, T b){ return a.compareTo(b)>0 ? a:b; } } // 调用此方法的方式如下: Integer m = Util.max(5, 9); Double n = Util.max(3.14, 2.718); ``` 以上就是一些常见的有关 Java 方面的知识点总结,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我先来一碗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值