Java中Map集合与Set集合概况

1、Set集合的基本特点:无序 、不可重复(能加入重复的值,但是加入值以后无效果),Set集合为什么能实现不重复的信息?因为实际上add方法的操作是赋值给了Map集合,而加入进去值的作为了key,而map的key又不能重复,所以Set能实现不重复的信息。

2、HashSet、LinkedHashSet与TreeSet的区别?这要考虑jdk的版本,它们的区别如下:(1)jdk1.8及以上:HashSet和TreeSet都是有序的,HashSet按散列排序,TreeSet的排序方式有迹可循(按照自然排序接口或比较器排序接口进行排序),LinkedHashSet是怎么放怎么取;(2)jdk1.7及以下:HashSet是无序的,TreeSet有自己默认的排序方式(按照自然排序接口或比较器接口进行排序),LinkedHashSet是怎么放怎么取。

3、Map集合的基本特点:无序、以键值对的形式添加元素,键不能重复,值可以重复,如果键相同,值会覆盖,并且它没有继承Collection接口。map.values()其实变成一个arraylist的集合,map.keySet()其实变成一个set的集合,为什么会变成一个set的集合呢?因为set集合的特性是值不重复,map最重要的是key不重复,key等同于给values变量值的签名,key当成values的变量名。

                Map<String, Object> m=new HashMap<>();
		m.put("a", 1);//相当于a=1
		m.put("b", 2);
		m.put("c", 3);

                Set<String> keySet = m.keySet();//获取Map的键
		for (Object s : keySet) {
			System.out.println(s);
		}
		
		Collection<Object> v = m.values();//获取Map的值
		for (Object t : v) {
			System.out.println(t);
		}
		
		Set<Entry<String, Object>> es = m.entrySet();//获取Map的键和值
		for (Entry<String, Object> t : es) {
			System.out.println("键:"+t.getKey()+"***值:"+t.getValue());
		}

4、如何用Map统计字符串中每个字符出现的次数?(1)将字符串拆成字符数组;(2)将字符数组的每一个元素作为Map集合的键,作为标识;(3)当字符第一次出现的时候,给键赋值为1;(4)当字符后面再次出现的时候,给原来的值加1,重新覆盖

                String str="我是程序猿我爱程序";
		char[] charArray = str.toCharArray();
		Map<Character, Integer> map=new HashMap<>();
		for (char c : charArray) {
			Integer val = map.get(c);
			if(val==null) {
				map.put(c, 1);
			}
			else {
				map.put(c, ++val);//注意这里不能写成val++
			}
		}
		
		Set<Entry<Character, Integer>> entrySet = map.entrySet();
		for (Entry<Character, Integer> entry : entrySet) {
			System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次");
		}

运行结果:

猜你喜欢

转载自blog.csdn.net/weixin_42687829/article/details/82666616