java 学习笔记 day12 set\map集合
1.set集合
1.1 保证唯一性的原理
HashSet保证元素唯一性的原理?
通过查看add方法的源码,我们知道了添加功能的执行过程中,是进行了数据的判断的。
这个判断的流程是:
首先比较对象的哈希值是否相同,这个哈希值是根据对象的hashCode()计算出来的。
如果哈希值不同,就直接添加到集合中
如果哈希值相同,继续执行equals()进行比较,
返回的是true,说明元素重复,不添加。
返回的是false,说明元素不重复,就添加。
如果我们使用HashSet集合存储对象,你要想保证元素的唯一性,就必须重写hashCode()和equals()方法。(右键自动生成就可以了)
2.Map集合
Map:
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。举例:
学生的学号和姓名
it001 林青霞
it002 张曼玉
it003 王祖贤实现类:
HashMap常用方法
V put(K key,V value): 添加元素
V remove(Object key): 根据键删除键值对元素
void clear(): 移除所有的键值对元素
boolean containsKey(Object key): 判断集合是否包含指定的键
boolean containsValue(Object value): 判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
int size():返回集合中的键值对的对数
V get(Object key): 根据键获取值
Set keySet(): 获取所有键的集合
Collection values(): 获取所有值的集合
entrySet 获取所有键值对
Map集合中的实现类的数据结构只针对键有效。
public class MapDemo3 {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map = new HashMap<String,String>();
//添加元素
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
map.put("张无忌", "赵敏");
//V get(Object key):根据键获取值
System.out.println("get:"+map.get("张无忌"));
System.out.println("get:"+map.get("张三丰"));
System.out.println("--------------------");
//Set<K> keySet():获取所有键的集合
Set<String> set = map.keySet();
for(String key : set) {
System.out.println(key);
}
System.out.println("--------------------");
//Collection<V> values():获取所有值的集合
Collection<String> values = map.values();
for(String value : values) {
System.out.println(value);
}
}
}
3. 练习:HashMap嵌套ArrayList
需求:HashMap集合嵌套ArrayList集合并遍历。
定义一个HashMap集合,它包含三个元素,每一个元素的键是String类型,值是ArrayList类型。
键:String 人物来自哪部电视剧
值:ArrayList 人物的名称
每一个ArrayList集合的数据是String类型的。
给出如下的字符串数据,请用代码实现需求。
第一个ArrayList集合的元素:(三国演义)
诸葛亮 赵云
第二个ArrayList集合的元素:(西游记)
唐僧 孙悟空
第三个ArrayList集合的元素:(水浒传)
武松 鲁智深
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class test2 {
public static void main(String[] args) {
HashMap<String, ArrayList> hm =new HashMap<>();
ArrayList<String> a1=new ArrayList<String>();
a1.add("诸葛亮");
a1.add("赵云");
hm.put("三国演义",a1);
ArrayList<String> a2=new ArrayList<String>();
a2.add("唐僧");
a2.add("孙悟空");
hm.put("西游记",a2);
ArrayList<String> a3=new ArrayList<String>();
a3.add("武松");
a3.add("鲁智深");
hm.put("水浒传",a3);
Set<String> s = hm.keySet();
for (String x:s){
System.out.println(x+"---"+hm.get(x));
}
}
}