一、学习笔记
<1>.LinkedHashSet
java.util.LinkedHashSet extends HashSet
特点
底层数据结构是 链表+ 哈希表
链表保证元素有序 哈希表保证元素唯一
先比较hashCode
不同 添加到集合
相同 继续比较equals
不同 添加
相同 不添加
<2>.Map集合
1.java.util.Map<K,V> 双列集合顶层接口
K: key 键 键是唯一的
V:value 值 值是可以重复的
方法
public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。 返回值一般是null值 如果键相同 值会覆盖 会返回被覆盖的值
public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
public boolean containsKey(Object key) 判断是否包含指定键
public V remove(Object key ) 根据键删除一对元素 并返回被删除的值
常用实现类
TreeMap
键 排序 唯一
HashMap
键 无序 唯一
LinkedHashMap
键 有序 唯一
public class Demo01_Map {
public static void main(String[] args) {
Map<String,Integer> map = new TreeMap<>();
// map = new HashMap<>();
// map = new LinkedHashMap<>();
map.put("杨幂",38);
map.put("唐嫣",18);
map.put("周也",138);
map.put("曾黎", 8);
//如果键相同 值会覆盖 会返回被覆盖的值
// Integer in = map.put("大郎", 108);
// System.out.println(in);
System.out.println(map);
// //根据键找值
// Integer integer = map.get("杨幂");
// System.out.println(integer);
//
// //判断集合是否包含指定键
// boolean b = map.containsKey("杨幂");
// System.out.println(b);
//根据键删除一对元素 返回被删除的值
Integer removeValue = map.remove("杨幂");
System.out.println(removeValue);
System.out.println(map);
}
}
2.JDK1.8后
public class Demo02_Map {
public static void main(String[] args) {
Map<String,Integer> map = new TreeMap<>();
map.put("杨幂",38);
map.put("唐嫣",18);
map.put("周也",138);
map.put("曾黎", 8);
//添加元素 键相同 值不覆盖 返回原来的值
// Integer value = map.putIfAbsent("曾黎", 108);
// System.out.println(value);
// System.out.println(map);
//根据键找值 如果有指定键 返回对应的值 如果没有给定键 则返回给定的默认值
// Integer value2 = map.getOrDefault("杨幂2", 100);
// System.out.println(value2);
//根据键和值删除 一对元素 键和值都相同 才能删除
boolean b = map.remove("杨幂", 38);
System.out.println(b);
System.out.println(map);
//1.8 默认方法
// map.forEach(new BiConsumer<String, Integer>() {
// @Override
// public void accept(String key, Integer value) {
// System.out.println(key+" "+value);
// }
// });
// map.forEach((k,v)-> System.out.println(k+" "+v));
}
}
3.1. Map集合的第一种遍历方式
核心方法
Set<K> keySet() 获取存储所有键的Set集合
1.定义Map集合 添加数据
2.调用keySet方法 获取存储所有键的Set集合
3.遍历Set集合 依次获取到每个元素(Map集合的key)
4.调用Map集合的get方法 根据键找到对应的值
public class Demo03_Map {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("柳岩",38);
map.put("唐嫣",18);
map.put("金莲",138);
map.put("大郎", 8);
// 2.调用keySet方法 获取存储所有键的Set集合
Set<String> set = map.keySet();
//迭代器
Iterator<String> it = set.iterator();
while(it.hasNext()){
// 3.遍历Set集合 依次获取到每个元素(Map集合的key)
String key = it.next();
//4.调用Map集合的get方法 根据键找到对应的值
Integer value = map.get(key);
System.out.println(key+" = "+value);
}
//增强for
for(String key : set){
System.out.println(key+" = "+map.get(key));
}
}
}
3.3. Map集合的第二种遍历方式
核心方法
Set<Map.Entry<K,V>> entrySet() 获取到存储结婚证(键值对映射关系对象)的Set集合
1.创建Map集合 添加数据
2.调用entrySet 获取到存储结婚证(键值对映射关系对象)的Set集合
3.遍历Set集合 依次获取到每个结婚证 对象
4.调用结婚证对象的方法 获取到 键 和值
K getKey()
V getValue()
public class Demo04_Map {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("柳岩",38);
map.put("唐嫣",18);
map.put("金莲",138);
map.put("大郎", 8);
//2.调用entrySet 获取到存储结婚证(键值对映射关系对象)的Set集合
Set<Map.Entry<String,Integer>> set = map.entrySet();
//迭代器
Iterator<Map.Entry<String,Integer>> it = set.iterator();
while(it.hasNext()){
//3.遍历Set集合 依次获取到每个结婚证 对象
Map.Entry<String,Integer> en = it.next();
// 4.调用结婚证对象的方法 获取到 键 和值
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());
}
}
}
4.HashMap
java.util.HashMap
底层数据结构是哈希表 允许null键和null值
键 无序 唯一
先比较hashCode
不同 元素不相同
相同 继续比较equals
相同
不同
HashMap集合 自定义类型作为键 需要重写hashCode和equals方法 保证键的唯一
5.TreeMap
java.util.TreeMap
特点
底层数据结构是红黑树 不允许null键 允许null值
键 排序 唯一
构造方法
public TreeMap() 如果是空参构造 集合中的键 必须实现自然排序接口
public TreeMap(Comparator c) 如果带参构造 需要传入一个比较器对象 键是否实现自然排序接口都可以
public TreeMap(Map<? extends K,? extends V> m)
不允许null键 允许null值
6.Properties
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
<3>.可变参数
JDK 1.5 可变参数
前提
参数类型确定
参数个数不确定
格式
数据类型...参数名
可以传入当前类型任意个数据
可变参数本质上就是数组 可以直接传数组
注意事项
1.一个方法只能有一个可变参数
2.如果方法有多个参数 可变参数放到最后
3.最牛的可变参数 Object...obj 任意类型 任意个数
二、今日总结
放松了一下心情,整理了最近的知识块,收心,认真学习吧!
三、明日计划
认真听讲,提高效率,目标立到且做到。