答案:通过定义Option和VotingSubject类构建投票系统基础,使用ConcurrentHashMap和synchronized保证线程安全,VoteService实现投票逻辑,printResults方法统计并展示各选项得票数与占比。

开发一个投票统计系统在Java中并不复杂,关键在于设计合理的数据结构、处理并发访问以及提供清晰的统计结果。下面从核心功能出发,分步骤说明如何实现一个基础但完整的投票统计系统。
1. 定义投票实体和选项
投票系统通常包含“投票主题”和“候选选项”。可以创建两个类来表示这些信息:
public class Option {private String id;
private String name;
private int voteCount;
// 构造方法、getter/setter
}
public class VotingSubject {
private String title;
private Map
public VotingSubject(String title) {
this.title = title;
this.options = new HashMap();
}
public void addOption(Option option) {
options.put(option.getId(), option);
}
public Map
return options;
}
}
2. 实现投票逻辑与线程安全
用户投票会修改计数,多个用户同时投票时需要保证数据一致性。使用ConcurrentHashMap和同步方法防止竞争条件。
public class VoteService {private final Map
public VoteService() {
this.subjects = new ConcurrentHashMap();
}
public synchronized void castVote(String subjectId, String optionId) {
VotingSubject subject = subjects.get(subjectId);
if (subject != null) {
Option option = subject.getOptions().get(optionId);
if (option != null) {
synchronized (option) {
option.setVoteCount(option.getVoteCount() + 1);
}
}
}
}
}
3. 统计与展示结果
提供方法输出当前各选项得票数及占比,便于分析。
采用三层架构开发,前台集成了产品在线展示,用户注册、在线调查、在线投稿后台有类别管理\图书管理\订单管理\会员管理\配送范围管理\邮件列表\广告管理\友情链接管理等后台添加图书时自动生成缩略图和文字水印主要参考了petshop的设计架构、使用了Asp.net2.0中很多MemberShip、master等新功能后台管理地址/web/admin/ 超级管理员账号密码均为aspx1特别提示:该系统需要
立即学习“Java免费学习笔记(深入)”;
public void printResults(String subjectId) {if (subject == null) return;
int totalVotes = subject.getOptions().values().stream()
.mapToInt(Option::getVoteCount).sum();
System.out.println("投票主题: " + subject.getTitle());
for (Option option : subject.getOptions().values()) {
double percentage = totalVotes > 0 ?
(double) option.getVoteCount() / totalVotes * 100 : 0;
System.out.printf("%s: %d 票 (%.2f%%)\n",
option.getName(), option.getVoteCount(), percentage);
}
}
4. 扩展建议
实际项目中可考虑以下增强:
- 加入用户身份验证,防止重复投票(可用Set记录已投用户ID)
- 使用数据库(如MySQL或Redis)持久化投票数据
- 提供REST API接口,用Spring Boot暴露HTTP服务
- 增加投票有效期控制,支持开始/结束时间
- 引入缓存机制提升高并发下的读取性能
基本上就这些。一个简单的Java投票统计系统可以从内存模型起步,逐步扩展为分布式服务。重点是保证投票过程的线程安全和结果的准确性。









