Java集合是用于存储对象的容器,它提供了一种结构化管理对象的方式。在 Java 中,集合按照其存储方式和性能特点可以分为 List(列表)、Set(集合)、Map(映射)三种大类。
-
列表(List):
- ArrayList:基于数组实现,支持随机访问和插入删除操作。
- LinkedList:基于链表实现,支持快速的插入删除操作,但随机访问效率较低。
- Vector:类似 ArrayList,但支持同步访问,线程安全。
-
集合(Set):
- HashSet:基于哈希表实现,不允许重复元素。
- LinkedHashSet:基于哈希表和链表实现,保留插入顺序。
- TreeSet:基于红黑树实现,元素按照自然顺序或者指定比较器排序。
-
映射(Map):
- HashMap:基于哈希表实现,存储键值对,不允许重复键。
- LinkedHashMap:基于哈希表和链表实现,保留插入顺序。
- TreeMap:基于红黑树实现,按照键的自然顺序或者指定比较器排序。
泛型
泛型是一种编程语言特性,可以在编写代码时指定数据类型参数,以便在代码中实现数据类型的参数化和抽象化,使代码更加灵活、通用和可重用。通过泛型,可以在不同类型之间实现代码的通用性,提高代码的可维护性和重用性。
在使用泛型时,需要先定义泛型类或泛型方法,通过在类名或方法名后面使用尖括号<>,在尖括号里面指定类型参数。可以使用单个类型参数,也可以使用多个类型参数,并且可以为类型参数指定范围,以限定可接受的数据类型。
泛型在编译时会进行类型擦除,即在生成字节码时,会将泛型类型转换为实际数据类型,以保证兼容性和性能。因此在运行时无法获取泛型类型的信息,但在编译时候会进行类型检查,避免在运行时出现类型转换错误。
// 定义一个泛型类
public class Box<T> {
private T data;
public Box() {
}
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
public static void main(String[] args) {
// 创建一个存储整数类型的Box对象
Box<Integer> integerBox = new Box<>();
// 设置数据
integerBox.setData(123);
// 获取数据
int number = integerBox.getData();
System.out.println("Integer value: " + number);
// 创建一个存储字符串类型的Box对象
Box<String> stringBox = new Box<>();
// 设置数据
stringBox.setData("Hello, Generics!");
// 获取数据
String message = stringBox.getData();
System.out.println("String value: " + message);
}
}