集合泛型
Java 集合框架中的泛型是 Java 5 引入的一个特性,它允许开发者在编译时就确定集合中元素的类型,从而避免类型转换和潜在的类型安全问题。以下是一些常用的 Java 集合类和它们使用泛型的例子:
-
ArrayList - 动态数组,提供快速随机访问。
ArrayList<String> list = new ArrayList<>(); list.add("Hello");
-
LinkedList - 双向链表,提供快速的插入和删除操作。
LinkedList<Integer> list = new LinkedList<>(); list.add(1);
-
HashSet - 基于哈希表的集合,不允许有重复元素。
HashSet<String> set = new HashSet<>(); set.add("Unique");
-
LinkedHashSet - 像 HashSet 一样,但是维护元素的插入顺序。
LinkedHashSet<Integer> set = new LinkedHashSet<>(); set.add(1);
-
TreeSet - 基于红黑树的集合,可以按照自然顺序或自定义顺序对元素进行排序。
TreeSet<String> set = new TreeSet<>(); set.add("Apple");
-
HashMap - 基于哈希表的键值对映射。
HashMap<String, Integer> map = new HashMap<>(); map.put("One", 1);
-
LinkedHashMap - 像 HashMap 一样,但是维护插入顺序或访问顺序。
LinkedHashMap<String, Double> map = new LinkedHashMap<>(); map.put("Pi", 3.14);
-
TreeMap - 基于红黑树的键值对映射,可以按照自然顺序或自定义顺序对键进行排序。
TreeMap<Integer, String> map = new TreeMap<>(); map.put(1, "First");
-
ConcurrentHashMap - 线程安全的 HashMap 变体,适合并发环境。
ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>(); map.put("Key", "Value");
使用泛型的好处包括:
- 类型安全:编译时检查类型,避免运行时类型错误。
- 消除类型转换:不需要显式地将元素从 Object 类型转换回原始类型。
- 代码重用:泛型类可以用于多种类型,提高代码的灵活性和可重用性。
Java 泛型也有一些限制,比如不能使用基本类型作为泛型类型,因为泛型在编译时会被擦除,所以不能创建泛型类型的数组。此外,泛型类不能有静态类型字段,因为它们与泛型类型参数相关联,而 Java 不允许有与泛型类型参数相关的静态字段。