java中list,map习题

📑前言

本文主要是【java】------java中list,map习题的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是听风与他🥇

☁️博客首页:CSDN主页听风与他

🌄每日一句:狠狠沉淀,顶峰相见

目录

1.map对value排序问题

  • map中存放着许多姓名:年龄等键值对数据,如{张三:2,李四:3}等数据,取出年龄最大的三个数据并输出
  • 注意点:存放数据时,要使用有序的map,如linkedHashMap等数据结构
java 复制代码
package test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, Integer> map = new HashMap<>();
		map.put("zhangsan", 3);
		map.put("lisi", 1);
		map.put("wangwu", 2);
		map.put("zhaoliu", 4);
		map.put("xiha", 5);
		Map<String, Integer> ans = sortMap(map);
		int i=3;
		Iterator<Entry<String, Integer>> entries =	ans.entrySet().iterator();
		while(i-->0) {
			Entry<String, Integer> entry = entries.next();
			System.out.println(entry.getKey()+":"+entry.getValue());
		}
	}
	
	public static Map<String, Integer> sortMap(Map<String, Integer> map){
		//利用Map的entrySet方法,转化为list进行排序
		List<Map.Entry<String, Integer>> entries = new ArrayList<>(map.entrySet());
		Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
			@Override
			public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
				// TODO Auto-generated method stub
				return o2.getValue()-o1.getValue();
			}
			
		});
		//排序好的list,一定要放进LinkedHashMap,因为只有LinkedHashMap是根据插入顺序进行存储
		LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
		for(Map.Entry<String, Integer> e:entries) {
			linkedHashMap.put(e.getKey(), e.getValue());
		}
		return linkedHashMap;
	}

}

2.对list中出现的字符串进行计数并存放在map中

  • list中存在许多字符串,对它们进行计数,并存放在map中
  • 注意点:存放数据时,要使用有序的map,如linkedHashMap等数据结构
java 复制代码
package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<>();
		list.add("apple");
		list.add("banana");
		list.add("apple");
		list.add("orange");
		list.add("banana");
		list.add("grape");
		list.add("grape");
		Map<String, Integer> map = f(list);
		System.out.println(map);
		Iterator<Entry<String, Integer>> entries =	map.entrySet().iterator();
		while(entries.hasNext()) {
			Entry<String, Integer> entry = entries.next();
			System.out.println(entry.getKey()+":"+entry.getValue()+" ");
		}
	}
	
	public static Map<String, Integer> f(List<String> list){
		//注意hashmap是无序的,linkedHashMap是有序的。
		Map<String, Integer> map = new LinkedHashMap<>();
		for(String i:list) {
			map.put(i, map.containsKey(i)?map.get(i)+1:1);
		}
		return map;
	}

}

3.将list中的数字字符串和字母字符串分割开

  • list中有许多字符串,请你将数字字符串和字母字符串分割开
  • 思路:根据数字和字母的acsll不同来进行区分
java 复制代码
package test;

import java.util.ArrayList;
import java.util.List;

public class test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<>();
		list.add("123");
		list.add("abc");
		list.add("456");
		list.add("def");
		list.add("789");
		list.add("ghi");
		List<String> list1 = new ArrayList<>();
		List<String> list2 = new ArrayList<>();
		for(String i:list) {
			if(i.charAt(0)>=97&&i.charAt(0)<=122) {
				list2.add(i);
			}else {
				list1.add(i);
			}
		}
		System.out.println("数字列表:"+list1+",字母列表:"+list2);
	}

}

4.map计算成绩

  • 在map中存放着许多同学的名字和成绩,请你计算同学们语数英三门成绩的平均分
java 复制代码
package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, List<Integer>> map = new LinkedHashMap<>();
		List<Integer> list1 = new ArrayList<>();
		list1.add(85);
		list1.add(90);
		list1.add(95);
		List<Integer> list2 = new ArrayList<>();
		list2.add(80);
		list2.add(85);
		list2.add(90);
		List<Integer> list3 = new ArrayList<>();
		list3.add(95);
		list3.add(100);
		list3.add(105);
		map.put("John", list1);
		map.put("Bob", list2);
		map.put("Alice", list3);
		Map<String, Double> map1 = f(map);
		for(String key:map1.keySet()) {
			System.out.println(key+":"+map1.get(key));
		}
	}
	
	public static Map<String, Double> f(Map<String, List<Integer>> map){
		Map<String, Double> map1 = new LinkedHashMap<>();
		Set<String> set=map.keySet();
		for(String i:set) {
			double avg=(double)(map.get(i).get(0)+map.get(i).get(1)+map.get(i).get(2))/3;
			map1.put(i, avg);
		}
		return map1;
	}

}

5.遍历list中数据,姓名、邮箱采用键值对方式存入map

java 复制代码
package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class test5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<>();
		list.add("John");
		list.add("john@qq.com");
		list.add("Alice");
		list.add("alice@qq.com");
		list.add("Bob");
		list.add("Bob@qq.com");
		Map<String, String> map=f(list);
		System.out.println(map);
		Set<String> set=map.keySet();
		for(String i:set) {
			System.out.println(i+":"+map.get(i));
		}
	}
	
	public static Map<String, String> f(List<String> list){
		Map<String, String> map = new LinkedHashMap<>();
		for(int i=0;i<list.size();i=i+2) {
			map.put(list.get(i), list.get(i+1));
		}
		return map;
	}
}

📑文章末尾

相关推荐
上上迁8 分钟前
分布式接口幂等性的演进和最佳实践,含springBoot 实现(Java版本)
java·spring boot·分布式
匚WYHaovous9 分钟前
Java断言的深度解析与实战指南
java
WanderInk21 分钟前
揭秘Java协变返回类型:让你的API少一点强转,多一点优雅
java·后端
黎明smaly21 分钟前
【排序】插入排序
c语言·开发语言·数据结构·c++·算法·排序算法
paopaokaka_luck33 分钟前
基于SpringBoot+Vue的非遗文化传承管理系统(websocket即时通讯、协同过滤算法、支付宝沙盒支付、可分享链接、功能量非常大)
java·数据库·vue.js·spring boot·后端·spring·小程序
iteye_993934 分钟前
让 3 个线程串行的几种方式
java·linux
YuTaoShao42 分钟前
【LeetCode 热题 100】142. 环形链表 II——快慢指针
java·算法·leetcode·链表
CCF_NOI.1 小时前
(普及−)B3629 吃冰棍——二分/模拟
数据结构·c++·算法
找不到、了1 小时前
分布式理论:CAP、Base理论
java·分布式
天天摸鱼的java工程师2 小时前
2025已过半,Java就业大环境究竟咋样了?
java·后端