Day17-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\CollectionandMap-集合(ArrayList和LinkedList)
集合
集合是一种容器,用来装数据的,类似于数组,但集合的大小可变
Java集合框架位于java.util包中
-
Collection接口储存一组不唯一、无序的对象
-
List接口储存一组不唯一、有序、有索引的对象
-
Set接口储存一组唯一、无序的对象
-
Map接口储存一组键值对象,提供key到value的映射
-
List接口
-
RandomAccess接口
-
Cloneable接口
-
Serialiable接口
接口分析
- List接口:列表,add,set,等一些对列表进行的操作
- Deque接口:有队列的各种特性
- Cloneable接口,能够复制,能够使用那个copy方法
- Serializeable接口:能够序列化
Collection不支持普通for循环遍历数据,因为for循环实现的前提是必须支持索引
Collection的遍历方式
- 迭代器(用来遍历集合的专用方式)
- java中迭代器代表是Iterator
- 增强for
- lambda表达式
ArrayList
实现了长度可变的数组,在内存中分配连续空间,遍历数组元素和随机访问元素的效率比较高
package com.CollectionandMap;
import java.util.ArrayList;
class Dog{
private String name;
Dog(String name){
this.name=name;
}
public String getName() {
return name;
}
}
public class ArrayListtest {
private ArrayList<Dog> dogs;
//版本号
private static final long serialVersionUID = 1L;
//缺省容量,是集合在创建时(未手动设置容量)自动分配的初始容量值,用于存储元素。
private static final int DEFAULT_CAPACITY = 100;
//空对象数组,指任何长度为 0 的对象数组
private static final Object[] EMPTY_ELEDATA = { };
//缺省空对象数组,特指 Java 集合框架中,某些类在未初始化或默认状态下使用的内部空数组常量(通常是静态常量)。
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEDATA = { };
//元素数组
transient Object[] elementData;
//实际元素大小,默认为0
private int size;
//最大数组容量
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
public static void main(String[] args) {
ArrayList dogs = new ArrayList();//ctrl+H查看继承树
dogs.add(new Dog("小狗一号"));
dogs.add(new Dog("小狗二号"));
dogs.add(new Dog("小狗三号"));
dogs.add(2,new Dog("小狗四号"));
System.out.println("总共有"+dogs.size()+"只小狗");
System.out.println("他们分别是");
for(int i=0;i<dogs.size();i++){
Dog d = (Dog)dogs.get(i);
System.out.println(d.getName());
}
dogs.remove(1);
dogs.remove("小狗三号");//object不是小狗三号,object的name才是
dogs.set(0,new Dog("小狗五号"));
for(int j=0;j<dogs.size();j++){
Dog d2 = (Dog)dogs.get(j);
System.out.println(d2.getName());
}
}
}
LinkedList
基于双向链表实现(每个节点 Node 包含 prev 前驱指针、next 后继指针和元素值),节点之间通过指针关联,不需要连续的内存空间。
-
LinkedList是通过链表实现的
-
如果在频繁插入,或者删除数据时,就用LinkedList性能会更好
-
异步,非线程安全
-
双向列表,可以当做队列来使用
-
是顺序存取结构
<E>是泛型参数(Generic Type Parameter),用于指定集合中元素的类型,是 Java 泛型机制的核心语法。-
作用
:限制集合只能存储特定类型的元素,在编译阶段就进行类型检查,避免运行时出现ClassCastException(类型转换异常)。例如:
AbstractSequentialList<String>表示这个集合只能存储String类型的元素;AbstractSequentialList<Integer>表示只能存储Integer类型的元素。
-
泛型的优势:无需在使用集合时手动强制类型转换,代码更简洁、安全。例如,从List
中取元素时,直接得到String类型,无需(String) 强制转换。
-
这里的 Node 就是链表的节点,通过 prev 和 next 指针将多个节点串联起来,形成链表结构。
- 相比数组(
ArrayList),这种通过指针关联的结构,使得LinkedList在中间位置增删元素时无需移动大量元素,只需修改指针即可,效率更高。

浙公网安备 33010602011771号