set集合(不包含重复元素的collection)
操作:
Set<String> set=new HashSet<>();//创建集合对象
set.add("nihao");
set.add("hehe");
保证元素唯一性的原理:
set唯一的原因关键在于add()方法,
首先比较对象的hash值是否相同,这个hash值是根据对象的hashcode()计算出来的
如果hash值不同,就直接添加到集合中
如果hash值相同,继续执行equals方法
返回的是true,则说明元素重复,不添加
返回的是false,则说明元素不重复,可以添加
综上,要让Set集合不出现重复元素的特性生效,一定要重写集合中元素的类的hascode()方法和equals()方法,重写的步骤用IDEA自动生成来完成即可。如果是String这种本身就已经重写了hascode()方法和equals()方法的类则不需要再重写了。
hashset集合练习(存储自定义对象并遍历)
HashSet<stu> set=new HashSet<>();
stu s1=new stu(20,"hehe");
stu s2=new stu(30,"haha");
set.add(s1);
set.add(s2);
for(stu s:set){
System.out.println(s.getAge()+s.getName());
}
map<key,value>
操作
//创建对象
HashMap<String, String> map=new HashMap<>();
//添加元素
map.put(“hehe”, “001”);
map.put(“long”, “002”);
System.out.println(map);
map方法
map集合中的实现类的数据结构只针对键有效
map.remove("hehe");//删除键值对元素
map.clear();//清空集合
map.isEmpty();//查看集合是否为空
map.size();//查看集合的大小
map根据键获取值
map.put("hehe", "002");
System.out.println(map.get("hehe"));
map获取所有键的集合(使用set集合存储,因为键唯一)
HashMap<String, String> map=new HashMap<>();
map.put("haha", "001");
map.put("hehe", "002");
//创建存储key的set集合
Set<String> set=map.keySet();
//遍历集合获取所有的键
for(String key:set){
System.out.println(key);
}
获取所有值的集合(使用collection集合存储,因为value可以重复)
HashMap<String, String> map=new HashMap<>();
map.put("haha", "001");
map.put("hehe", "001");
//创建collection集合
Collection<String> values=map.values();
for(String value:values){
System.out.println(value);
}
map集合的遍历方式一
思路:
map相当于一对夫妻
1,先把所有丈夫集合起来
2,遍历丈夫集合,找到每一个丈夫
3,根据丈夫找到每一个妻子
HashMap<String, String> map=new HashMap<>();
map.put("hehe", "001");
map.put("nihao", "002");
map.put("xiaolong", "003");
//创建一个集合,存储key
Set<String> set=map.keySet();
for(String key:set){
//通过key获得value
String value=map.get(key);
//打印key+value
System.out.println(key+"--"+value);
}
map集合遍历的方式2
思路:
1,获取所有结婚证的集合
2,遍历结婚证,得到每一个结婚证
3,根据结婚证获取丈夫和妻子
Map<String, String> map=new HashMap<>();
map.put("hehe", "001");
map.put("nihao", "002");
map.put("xiaolong", "003");
//使用一个set集合存储map的对象
Set<Map.Entry<String,String>> set=map.entrySet();
//使用增强for循环,用(Map.Entry<String,String>)当做元素,
然后调用getkey()和getvalue()获取键值对
for(Map.Entry<String,String> me:set){
String key=me.getKey();
String value=me.getValue();
System.out.println(key+"---"+value);
}
map遍历练习
方式1(使用键找值)
HashMap<String, stu> map=new HashMap<String,stu>();
stu s1=new stu(10,"hehe");
stu s2=new stu(20,"haha");
map.put("001", s1);
map.put("002", s2);
Set<String> set=map.keySet();
for(String key:set){
stu value=map.get(key);
System.out.println(key+value.getAge()+value.getName());
}
方式2(使用键值对对象)
HashMap<String, stu> map=new HashMap<String,stu>();
stu s1=new stu(10,"hehe");
stu s2=new stu(20,"haha");
map.put("001", s1);
map.put("002", s2);
Set<Map.Entry<String, stu>> set2=map.entrySet();
for(Map.Entry<String, stu> me :set2){
String key=me.getKey();
stu value=me.getValue();
System.out.println(key+value.getAge()+value.getName());
}
练习(键值为对象)
HashMap<stu, String> map=new HashMap<stu, String>();
stu s1=new stu(10,"nihao");
stu s2=new stu(20,"wode");
map.put(s1, "beijing");
map.put(s2, "shanghai");
Set<stu> set=map.keySet();
for(stu s11:set){
String value=map.get(s11);
System.out.println(s11.getAge()+"--"+s11.getName()+"--"+value);
}
集合的嵌套练习
Arraylist中嵌套hashmap
ArrayList<HashMap<String, String>> arr=new ArrayList<HashMap<String, String>>();
HashMap<String, String> map=new HashMap<>();
map.put("nihao", "001");
map.put("wode", "002");
arr.add(map);
HashMap<String, String> mp1=new HashMap<>();
mp1.put("xialo", "123");
map.put("laowang","456");
arr.add(mp1);
for(HashMap<String, String> hm: arr){
Set<String> set=hm.keySet();
for(String key:set){
String value=hm.get(key);
System.out.println(key+"--"+value);
}
System.out.println("===================");
}
hashmap嵌套arraylist
HashMap<String, ArrayList<String>> hm=new HashMap<String, ArrayList<String>>();
ArrayList<String> sg=new ArrayList<>();
sg.add("zhaoyun");
sg.add("liubei");
hm.put("三国", sg);
ArrayList<String> xyj=new ArrayList<>();
xyj.add("孙悟空");
xyj.add("八戒");
hm.put("西游记", xyj);
Set<String> set=hm.keySet();
for(String key:set){
ArrayList<String> value=hm.get(key);
for(String s:value){
System.out.println(key+"=="+s);
}
}