集合中map有什么样的特点?
泛型的定义和使用?
。,、?!.-/:;()¥@
在 Java 中,Map
是一种用于存储键值对的数据结构,属于 Java 集合框架的一部分。它主要有以下几个特点:
Map
以键值对(key-value pairs)的形式存储数据,每个键唯一地映射到一个值。HashMap
、TreeMap
、LinkedHashMap
、Hashtable
等。Map
中是唯一的,不能重复。如果插入一个重复的键,新的值将替换掉旧的值。HashMap
:键值对无序存储,基于哈希表。LinkedHashMap
:存储顺序与插入顺序相同。TreeMap
:键按自然顺序或自定义顺序排序,基于红黑树。HashMap
),或者 O(log n)(对于 TreeMap
)。null
键和值HashMap
和 LinkedHashMap
允许一个 null
键和多个 null
值。TreeMap
不允许 null
键。Map<String, Integer> map = new HashMap<>();
map.put("one", 1); // 添加键值对
map.get("one"); // 通过键获取值
map.containsKey("one"); // 检查是否包含指定键
map.containsValue(1); // 检查是否包含指定值
map.remove("one"); // 移除指定键的键值对
map.size(); // 获取键值对数量
Java 泛型(Generics)是引入的一种机制,用来使类、接口和方法具有更强的类型安全性和通用性,避免在使用时进行类型转换,提高代码的可读性和安全性。
泛型类允许在类的定义中指定一个或多个类型参数,这些类型参数可以在类的字段、方法或构造函数中使用。
// 定义一个泛型类
public class Box<T> {
private T item;
public void set(T item) {
this.item = item;
}
public T get() {
return this.item;
}
}
// 使用泛型类
Box<String> box = new Box<>();
box.set("Hello");
String value = box.get(); // 类型安全,无需强制转换
泛型方法可以在方法的返回类型或参数类型中使用泛型,方法定义时可以独立于类是否是泛型类。
// 定义一个泛型方法
public <T> T print(T item) {
System.out.println(item);
return item;
}
// 调用泛型方法
String result = print("Hello"); // T 推断为 String
接口也可以使用泛型,允许接口的实现类在实现时指定具体的类型。
public interface Container<T> {
void add(T item);
T get();
}
// 实现泛型接口
class StringContainer implements Container<String> {
private String item;
public void add(String item) {
this.item = item;
}
public String get() {
return this.item;
}
}
泛型通配符 ?
允许定义具有一定灵活性和限制的泛型类型,常见的有:
? extends T
:表示类型 T 的子类型。? super T
:表示类型 T 的父类型。public void processList(List<? extends Number> list) {
// list 可以是 List<Integer>, List<Double> 等
}
ClassCastException
。