本文主要解释这段代码的含义,可以加深uu们对这段代码的理解。
List<String> list = new LinkedList<>();
这段代码的作用是创建一个空的链表(LinkedList),并将其赋值给一个类型为List<String>的变量。下面从几个方面详细分析:
1. 数据类型与变量声明
List<String>:这是一个接口类型,使用了泛型String,表示该列表只能存储字符串元素。
list:变量名,用于引用后续创建的链表对象。
2. 对象创建
new LinkedList<>():
new:关键字,用于在内存中实例化一个对象。
LinkedList<>:具体的实现类,这里使用了 Java 的双向链表结构。
<?>:泛型的类型推断(Java 7 + 特性),编译器会根据左侧的List<String>自动推断为String类型。
3. 多态的应用
接口引用指向实现类对象:List是接口,LinkedList是其实现类。这种写法遵循面向接口编程的原则,使得代码更灵活(例如后续可轻松替换为ArrayList等其他实现)。
为什么用 List 声明而非 LinkedList?
面向接口编程:通过接口类型(List)声明变量,而非具体实现类(LinkedList),提高了代码的灵活性。后续如需更换实现(如改为 ArrayList),只需修改右侧的实例化部分,而无需改动其他代码。
示例:
List<String> list = new ArrayList<>(); // 轻松切换实现
3. LinkedList 的特点
优点:
--插入/删除元素效率高(时间复杂度 O(1))。
--实现了 Deque 接口,可作为队列或双端队列使用。
缺点:
--随机访问性能较差(时间复杂度 O(n))。
4. 适用场景
需要频繁在列表中间增删元素时(如实现队列、栈等数据结构)。
不需要频繁按索引访问元素的情况
5.示例
// 添加元素
list.add("cherry"); // 尾部添加
list.add(1, "date"); // 指定位置插入
// 访问元素
String first = list.get(0); // 获取第一个元素
// 删除元素
list.remove(0); // 删除第一个元素
// 遍历元素
for (String fruit : list) {
System.out.println(fruit);
}
拓展(实例化队列):Queue是一个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口
//从队尾入队列
public static void main(String[] args) {
Queue<Integer> q = new LinkedList<>();
q.offer(1);
q.offer(2);
q.offer(3);
q.offer(4);
q.offer(5);
System.out.println(q.size());
System.out.println(q.peek()); //获取队头元素
q.poll();
System.out.println(q.poll());//从队头出队列,并将删除的元素返回
if(q.isEmpty()){
System.out.println("队列空");
}else{
System.out.println(q.size());
}
}