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出来的数字的长度要大于列表的长度,那么他的长度就是数组长度的数组
}
}