泛型和容器三

有关泛型和容器我只是简单的说说他们的特性,具体详细需要了解需要在网上百度学习了.

今天说到有关queue队列这个容器,他存储对象遵从先进先出的原则,并且在并发编程中特别重要,同样Linkedlist提供了方法支持队列的行为并实现了queue接口.offer()是queue的相关方法之一,他在允许的情况下将元素插入队尾或者返回false,peek()和element()在不移除的情况下返回队头,poll()和remove()移除并返回队头,但是peek()和poll()在队列为空时返回null.其他会抛出异常.相对于队列还有PriorityQueue优先级队列.他可以声明下一个弹出元素是最重要的元素.

不带容器(如 Java 中的 `ArrayList` 等)需要进行装箱拆箱,原因主要与容器存储对象的类有关。 在 Java 中,不带容器通常被设计为可以存储 `Object` 类的元素。而 `Object` 是所有类的基类,属于引用类。然而,像 `int`、`double`、`char` 等基本数据类并不是引用类,它们是值类。当需要将基本数据类的数据存入不带容器时,就需要将这些值类的数据转换为对应的引用类,这个过程就是装箱。例如,将 `int` 类的变量存入 `ArrayList` 时,会自动将 `int` 转换为 `Integer` 类,这就是自动装箱的过程。示例如下: ```java import java.util.ArrayList; public class BoxingExample { public static void main(String[] args) { ArrayList list = new ArrayList(); int i = 10; list.add(i); // 自动装箱,将 int 类的 i 转换为 Integer 类 } } ``` 当从不带容器中取出元素时,容器中存储的是引用类的对象,而如果需要将其作为基本数据类使用,就需要将引用类的对象转换为基本数据类,这个过程就是拆箱。例如,从 `ArrayList` 中取出 `Integer` 类的元素并赋值给 `int` 类的变量时,会自动将 `Integer` 转换为 `int`,这就是自动拆箱的过程。示例如下: ```java import java.util.ArrayList; public class UnboxingExample { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(10); // 自动装箱 int j = (int) list.get(0); // 自动拆箱,将 Integer 类的元素转换为 int 类 } } ``` 装箱拆箱的定义方面,装箱就是隐式的将一个值转换为引用对象,拆箱就是将一个引用对象转换成任意值 [^2]。 不过,装箱拆箱操作会带来一些性能开销。在装箱时,会在堆上创建一个新的对象,这涉及到内存分配对象初始化的操作;拆箱时需要进行类检查转换操作。而且,装箱拆箱还会带来不少的代码量。为了减少开发者的负担,Java 提供了自动装箱拆箱机制 [^1]。 此外,从更深入的原理来看,未装箱的值类没有方法表指针,不能通过值类来调用其上继承的虚方法。当调用继承于基类(如 `System.ValueType`)的某些方法(如 `GetType()`)时,值类需要装箱以生成方法表指针 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值