import java.util.*; public class Main { public static void main(String[] args) { //创建一个LikeRecorder对象 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> list;//使用Set来存储点赞的用户名,保证不重复 public LikeRecorderImpl(){ list =new HashSet<>(); } @Override public void like(String username){ /** * 若用户没有点赞过,则记录此次点赞行为。 * 若用户曾经点赞过,则删除用户点赞记录。 */ if(list.contains(username)){ // 若用户曾经点赞过,则删除用户点赞记录。 list.remove(username); } else{ // 若用户没有点赞过,则记录此次点赞行为。 list.add(username); } } @Override public String[] getLikeUsers(){ // 返回所有点赞的用户名 return list.toArray(new String[0]);//这里是如果列表的长度大于new string[0]创建的数组长度,那么他会返回列表长度的数组拷贝数据到该数组中去,反之new出来的数字的长度要大于列表的长度,那么他的长度就是数组长度的数组 } }