java操作题--集合

题目:
在这里插入图片描述
在这里插入图片描述
代码:

import java.util.*;
import java.lang.String;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String m = in.nextLine ();//in.nextLine吸收输入int后的换行符,否则下面的输入字符串部分会报错
        HashMap<String, ArrayList<Integer>> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            String oneVip = in.nextLine();//输入一个数据
            if (oneVip.charAt(0) != 's') {
                continue;
            }
            StringTokenizer st = new StringTokenizer(oneVip);//用StringTolenizer函数来默认以空格为分界线分开一个字符串
            String vipId = st.nextToken();//vip名字部分!!第一个以空格分开的子字符串
            String time1 = st.nextToken();//时间部分!!第一个的下一个以空格分开的子字符串
            String time2 = time1.substring(0, 2) + time1.substring(3, 5) + time1.substring(6, 8);//让时间部分的10:10:10->101010,改变其为全整数形式的字符串
            Integer time = Integer.valueOf(time2);//将字符串的时间变为int型
            if (!map.containsKey(vipId)) {//当map的键中没有此时输入的vipId时
                ArrayList<Integer> list = new ArrayList<>();//新建一个list
                list.add(time);//将此时的时间放入这个list
                map.put(vipId, list);//以vipId为键,存放时间的list为值存入
            } else map.get(vipId).add(time);//如果map的键中包含此时输入的vipId,就直接通过键名取出键值,add(添加)此时的时间
        }
        ArrayList Vip = new ArrayList();//一个存储满足条件的vip名的list集合
        for (String i : map.keySet()) {//循环遍历map
            if (map.get(i).size() >= 6) {//当map的键i对应的键值list集合的元素个数大于等于6时进入最终判断,最少需要六个时间才满足封号的要求
                List<Integer> oneVipTime = map.get(i);//新定义一个int的泛型list集合存放键位i的键值list
                Collections.sort(oneVipTime);//排序,方便下面的运算
                for (int j = 5, x = 0; j < oneVipTime.size(); j++, x++) {
                    if (oneVipTime.get(j) - oneVipTime.get(x) <= 10000) {//第i+5个-第i个<=10000->第i+5个时间-第i个时间<一个小时,
                        Vip.add(i);//满足封号,存入
                        break;//跳出,继续判断
                    }
                }
            }
        }
        Collections.sort(Vip);//全部满足条件的vip名字存入后,排序!!!!!按照字典顺序排序
        for (int i = 0; i < Vip.size(); i++) {
            System.out.println(Vip.get(i));//输出!
        }
    }
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值