Map集合

博客围绕集合框架Map展开,介绍了Map方法归类、两种遍历方式,阐述了Map去重复和排序的方法,排序需写实体类实现comparable接口,还提及运用Map统计字符串出现次数这一面试题,常见实现类为HashMap,查询效率高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.集合框架Map方法归类
2.Map两种遍历方式
3.Map的去重复以及排序
4.运用Map统计字符串出现的次数(面试题)

Map中存放的都是一组组映射关系(Key==value)
Map中的key不要求有序,不允许重复。value同样不要求有序,但可以重复。
最常见的Map实现类是HashMap,
储存方式是哈希表,优点是查询指定元素效率高。
在集合中是允许嵌套的
在map集合中key值不能重复,但是value值可以

1.集合框架Map方法归类

HashMap<String, Object> map=new HashMap<>();
		map.put("java01", 1);
		map.put("java02", 2);
		map.put("java03", 3);
		map.put("java04", 3);

	1、增加

	map.put(K key, V value) 
	map.putAll(Map<? extends K,? extends V> m) 


	2、删除

	map.clear() 
	map.remove(Object key) 

	3、判断

	map.containsKey(Object key) 
	map.containsValue(Object value) 
	map.isEmpty() 



	4、获取
	
	map.get(Object key)
	map.size()
	map.values()  


关于put:
	1:	添加元素的同时  他可以编辑原有的元素
 		如果说集合中没有key对应的value,那么就往集合中添加元素
 		如果说集合中对应的key有values值,则代表替换原有的值
  	2:	返回替换前原有的value值

		Object obj=map.put("java04", "*");
		返回的是你之前传进的value值

2.Map两种遍历方式
第一种:map.entrySet
	Set<Entry<String, Object>> entrySet = map.entrySet();
		for (Entry<String, Object> entry : entrySet) {
			System.out.println(entry.getKey()+"=="+entry.getValue());
		}
		
		System.out.println("-------------------------");
		
		
第二种:map.keySet
		Set<String> keySet = map.keySet();
		for (String key : keySet) {
			System.out.println(key+"=="+map.get(key));
		}
3.Map的去重复 和排序

Map

	Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合石线程同步的,jdk1.0,效率低

	HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。将Hashtable替代;jdk1.2,效率高

	TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序

排序:先写一个实体类 实现comparable接口



		Map<Student, String> map = new TreeMap<>();
		 map.put(new Student("liuting",18), "beijing");
		 map.put(new Student("wangwang",56), "changcha");
		 map.put(new Student("goudan",28), "dongjin");
		 map.put(new Student("xuayangyang",18), "hulunbeier");
		 map.put(new Student("liuting",18), "beijing");
		 map.put(new Student("liuting",18), "beijing");
	
	
		Set<Entry<Student, String>> entrySet = map.entrySet();
		for (Entry<Student, String> entry : entrySet) {
		System.out.println(entry.getKey()+"==="+entry.getValue());
		
		}



		//重写
			@Override
			public int hashCode() {
				return this.getName().hashCode()+this.getAge()*39;
			}


		//判重equals 不然还是原来的数
		@Override
		public boolean equals(Object obj) {
			Student stu=(Student) obj;
			return 	this.getAge()==stu.getAge()&&this.getName().equals(stu.getName());
		}

//按年龄进行排序
		@Override
		public int compareTo(Student o) {
			int num=this.getAge()-o.getAge();//主要条件
			if(num==0) {
				return this.getName().compareTo(o.getName());//次要条件
			}
			return num;
		}



//排序  按名字首字母排序
	class StuComp implements Comparator<Student>{

		@Override
		public int compare(Student o1, Student o2) {
			int num=o1.getName().compareTo(o2.getName());
			if(num==0) {
				return o1.getAge()-o2.getAge();
			}
			return num;
		}
4.运用Map统计字符串出现的次数(面试题)
/**
 * 
 * 思考
 * 统计  排序
 * 
 * 统计功能
 * 
 * 1.将字符串转为字符数组  将这个字符串中的字符串中的字符当作map集合中的map,
 * 将字符的次数作为value值
 * 
 * 
 * 2.当字符出现第一次的时候,用它在集合中寻找,返回值必然为null,之后将该字符对应的值改为1
 * 
 * 3.如果不是第一次出线值不为null  就应该加一;
 */

//定义一个值
		public static void main(String[] args) {
			String str="ajuhoarhoaloriouehjfuvkajdfbhoiaehp";
			str=cishu(str);
			System.out.println(str);
		}

//字符串统计的功能
		public  static String cishu(String str) {
			char[] charArray = str.toCharArray();
			//创建一个集合
			Map<Character, Integer>map=new HashMap<>();//map集合中的泛型要使用包装类或者是引用数据类型
			//遍历
			for (char c : charArray) {
				Integer value = map.get(c);
				if(value==null) {
					map.put(c, 1);//该字符对应的值不为null
				}else {
					map.put(c, ++value);
				}
			}


	StringBuffer和String的区别
	String:会开辟一个行的空间
	StringBuffer:不会开辟新的空间;从而性能更优


		StringBuffer sb=new StringBuffer();
			for(Map.Entry<Character, Integer> entry:map.entrySet()) {
				sb.append(entry.getKey()+"("+entry.getValue()+")");
			}
			return sb.toString();
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值