列表

详情


JAVA47. 记录点赞用户

描述

为了实现社区点赞功能,要求设计一个点赞记录器,该工具包含如下两个方法:
1. like方法:该方法需要传入用户名作为参数,如果用户没点赞过,则记录本次点赞行为,若用户已经点赞过,则删除他的点赞行为。
2. getLikeUsers方法:该方法需要返回所有点赞用户的名字,不要求顺序。
(为保证答案正确,请使用HashSet完成本题)

输入描述

用户名

输出描述

所有点赞且未取消点赞的用户名,不要求顺序。(输出为Arrays.toString形式)

示例1

输入:

Tom Jim Lucy Lily Tom Lucy Tom

输出:

[Tom, Lily, Jim]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java 解法, 执行用时: 26ms, 内存消耗: 10604KB, 提交时间: 2022-02-09

import java.util.*;

public class Main {

    public static void main(String[] args) {
        LikeRecorder recorder = new LikeRecorderImpl();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }

        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }

}

/**
 * 点赞记录器
 */
interface LikeRecorder {

    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);

    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();

}

class LikeRecorderImpl implements LikeRecorder {

    // write your code here......
     // write your code here......
    //用map记录用户是否点赞,如果是false,表示未点赞,或取消了点赞;如果是true,表示已点赞
    Map<String,Boolean>map=new HashMap<>();

    @Override
    public void like(String username) {
    //如果用户未点赞,则更新为已点赞,如果用户已经点赞,则重置为点赞
        map.put(username,!map.getOrDefault(username,false));
    }
    @Override
    public String[]   getLikeUsers(){
    List<String>list=new ArrayList<>();
    //遍历map,将已点赞的用户添加到list
        for (String key: map.keySet()){
            boolean value =map.get(key);
            //value为true表示已点赞
            if (value){
                list.add(key);
            }
        }
        //将list转化为String类型数组
        return list.toArray(new String[list.size()]);
    }

}

Java 解法, 执行用时: 26ms, 内存消耗: 10680KB, 提交时间: 2022-02-08

import java.util.*;

public class Main {

    public static void main(String[] args) {
        LikeRecorder recorder = new LikeRecorderImpl();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }

        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }

}

/**
 * 点赞记录器
 */
interface LikeRecorder {

    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);

    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();

}

class LikeRecorderImpl implements LikeRecorder {

    private  Set<String> userRecord;
    // write your code here......
    @Override
    public void like(String username){
        if(userRecord.contains(username)){
            userRecord.remove(username);
        }else{
            userRecord.add(username);
        }
    }
    @Override
    public String[] getLikeUsers(){

        return userRecord.toArray(new String[userRecord.size()]);
    }
    public LikeRecorderImpl(){
        super();
        this.userRecord = new HashSet<String>();
    }
}

Java 解法, 执行用时: 27ms, 内存消耗: 10544KB, 提交时间: 2021-11-24

import java.util.*;

public class Main {

    public static void main(String[] args) {
        LikeRecorder recorder = new LikeRecorderImpl();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }

        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }

}

/**
 * 点赞记录器
 */
interface LikeRecorder {

    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);

    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();

}

class LikeRecorderImpl implements LikeRecorder {

    // write your code here......
    Set<String> names = new HashSet<>();
    @Override
    public void like(String username) {
        if(names.contains(username)){
            names.remove(username);
        }else {
            names.add(username);
        }
    }

    @Override
    public String[] getLikeUsers() {
        int count = 0;
        String[] str = new String[names.size()];
        for (String name : names) {
            str[count] = name;
            count++;
        }
        return str;
    }

}

Java 解法, 执行用时: 27ms, 内存消耗: 10576KB, 提交时间: 2022-02-08

import java.util.*;

public class Main {

    public static void main(String[] args) {
        LikeRecorder recorder = new LikeRecorderImpl();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }

        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }

}

/**
 * 点赞记录器
 */
interface LikeRecorder {

    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);

    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();

}

class LikeRecorderImpl implements LikeRecorder {

    // write your code here......
    private HashSet set=new HashSet();
    @Override
    public void like(String username){
        if(!set.contains(username)){
            set.add(username);
        }else{
            set.remove(username);
        }
        
    }
    @Override
    public String[] getLikeUsers(){
        String[] ret = null;
        String str="";
        for(Object str1 : set){
            str=str+";"+str1;
        }
        str=str.substring(1);
        ret=str.split(";");
        return ret;
    }
}

Java 解法, 执行用时: 27ms, 内存消耗: 10612KB, 提交时间: 2021-11-15

import java.util.*;

public class Main {

    public static void main(String[] args) {
        LikeRecorder recorder = new LikeRecorderImpl();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String name = scanner.next();
            recorder.like(name);
        }

        System.out.println(Arrays.toString(recorder.getLikeUsers()));
    }

}

/**
 * 点赞记录器
 */
interface LikeRecorder {

    /**
     * 若用户没有点赞过,则记录此次点赞行为。
     * 若用户曾经点赞过,则删除用户点赞记录。
     *
     * @param username 用户名
     */
    void like(String username);

    /**
     * 返回所有点赞的用户名
     *
     * @return 用户名数组
     */
    String[] getLikeUsers();

}

class LikeRecorderImpl implements LikeRecorder {

    // write your code here......
    private Set<String> nameSet;
    
    public LikeRecorderImpl(){
        nameSet=new HashSet();
    }
    public void like(String username){
        if(!nameSet.add(username)){
            nameSet.remove(username);
        }
    }
    public String[] getLikeUsers(){
        return nameSet.toArray(new String[0]);
    }
}

上一题