day12 集合 set map

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);
			}
			
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值