Map
java.util.Map<K,V> 双列集合顶层接口
K: key 键 键是唯一的
V:value 值 值是可以重复的
方法
public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。 返回值一般是null值 如果键相同 值会覆盖 会返回被覆盖的值
map.put
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
map.get
public boolean containsKey(Object key) 判断是否包含指定键
map.containsKey
public V remove(Object key ) 根据键删除一对元素 并返回被删除的值
map.remove
常用实现类
TreeMap
键 排序 唯一
java.util.TreeMap
特点:
底层数据结构是红黑树 不允许null键 允许null值
键 排序 唯一
构造方法
public TreeMap() 如果是空参构造 集合中的键 必须实现自然排序接口
public TreeMap(Comparator c) 如果带参构造 需要传入一个比较器对象 键是否实现自然排序接口都可以
public TreeMap(Map<? extends K,? extends V> m)
//获取最小键
Integer firstKey = map.firstKey();
//获取最大键值对
Map.Entry<Integer, String> lastEntry = map.lastEntry();
//获取 >=指定键的 最小键
Integer ceilingKey = map.ceilingKey(15);
HashMap
键 无序 唯一
java.util.HashMap
特点:
底层数据结构是哈希表 允许null键和null值
键 无序 唯一
先比较hashCode
不同 元素不相同
相同 继续比较equals
相同
不同
HashMap集合 自定义类型作为键 需要重写hashCode和equals方法 保证键的唯一
LinkedHashMap
键 有序 唯一
java.util.Properties
特点
1.继承自Hashtable 实现了Map接口
2.没有泛型 键String 值String
3.唯一一个可以和IO流直接结合使用的集合
方法
setProperty(String key,String value) 添加元素 相当于 put
getProperty(Object key) 根据键找值 相当于 get
Set<String> stringPropertyNames() 获取存储键的Set集合 相当于 keySet
Properties p = new Properties();
p.setProperty("name","liuyan");
Map的遍历方式
方式一
Set<K> keySet() 获取存储所有键的Set集合
1.定义Map集合 添加数据
2.调用keySet方法 获取存储所有键的Set集合
3.遍历Set集合 依次获取到每个元素(Map集合的key)
4.调用Map集合的get方法 根据键找到对应的值
Map<String,Integer> map = new HashMap<>();
Set<String> set = map.keySet();
while(it.hasNext()){
String key = it.next();
Integer value = map.get(key);
System.out.println(key+" = "+value);
}
for(String key : set){
System.out.println(key+" = "+map.get(key));
}
方式二
Set<Map.Entry<K,V>> entrySet() 获取到存储结婚证(键值对映射关系对象)的Set集合
1.创建Map集合 添加数据
2.调用entrySet 获取到存储结婚证(键值对映射关系对象)的Set集合
3.遍历Set集合 依次获取到每个结婚证 对象
4.调用结婚证对象的方法 获取到 键 和值
K getKey()
V getValue()
Set<Map.Entry<String,Integer>> set = map.entrySet();
Iterator<Map.Entry<String,Integer>> it = set.iterator();
while(it.hasNext()){
Map.Entry<String,Integer> en = it.next();
String key = en.getKey();
Integer value = en.getValue();
System.out.println(key + " = "+value);
}
for(Map.Entry<String,Integer> en: set){
System.out.println(en.getKey() + " = "+en.getValue());
}
可变参数
前提
参数类型确定
参数个数不确定
格式
数据类型...参数名
可以传入当前类型任意个数据
可变参数本质上就是数组 可以直接传数组
public static int sum (int...a ){
int sum = 0;
for (int i : a) {
sum += i;
}
return sum;
}
int sum2 = sum(10, 20, 30);
int[] arr = {10,20,30,40};
int sum3 = sum(arr);
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"abc","bcd","aaa","bbb");
注意事项
1.一个方法只能有一个可变参数
2.如果方法有多个参数 可变参数放到最后
3.最牛的可变参数 Object...obj 任意类型 任意个数
2.记住map实现类型的特点
3.开心,充实
4.汇总Thread