|
一个简单的 Java 源码示例,展示了如何实现一个收藏文章的算法及数据库表结构的设计实现
一个简单的 Java 源码示例,展示了如何实现一个收藏文章的算法。这个示例中包含了用户、文章的类定义,以及如何实现收藏功能,并显示每个用户收藏的文章和每篇文章被哪些用户收藏过。
### 1. 定义用户和文章类
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- // 用户类
- class User {
- private String username;
- private List<Article> favoriteArticles;
- public User(String username) {
- this.username = username;
- this.favoriteArticles = new ArrayList<>();
- }
- public String getUsername() {
- return username;
- }
- public void addFavoriteArticle(Article article) {
- if (!favoriteArticles.contains(article)) {
- favoriteArticles.add(article);
- article.addUser(this); // 同时将用户添加到文章的收藏用户列表
- }
- }
- public List<Article> getFavoriteArticles() {
- return favoriteArticles;
- }
- }
- // 文章类
- class Article {
- private String title;
- private List<User> usersWhoFavorited;
- public Article(String title) {
- this.title = title;
- this.usersWhoFavorited = new ArrayList<>();
- }
- public String getTitle() {
- return title;
- }
- public void addUser(User user) {
- if (!usersWhoFavorited.contains(user)) {
- usersWhoFavorited.add(user);
- }
- }
- public List<User> getUsersWhoFavorited() {
- return usersWhoFavorited;
- }
- }
复制代码 ### 2. 主程序示例
- public class Main {
- public static void main(String[] args) {
- // 创建用户
- User user1 = new User("Alice");
- User user2 = new User("Bob");
- // 创建文章
- Article article1 = new Article("Java Programming");
- Article article2 = new Article("Data Structures");
- // 用户收藏文章
- user1.addFavoriteArticle(article1);
- user1.addFavoriteArticle(article2);
- user2.addFavoriteArticle(article1);
- // 显示每个用户收藏的文章
- System.out.println(user1.getUsername() + " 收藏的文章:");
- for (Article article : user1.getFavoriteArticles()) {
- System.out.println("- " + article.getTitle());
- }
- System.out.println(user2.getUsername() + " 收藏的文章:");
- for (Article article : user2.getFavoriteArticles()) {
- System.out.println("- " + article.getTitle());
- }
- // 显示每篇文章被哪些用户收藏过
- System.out.println("\n文章收藏情况:");
- for (Article article : new Article[]{article1, article2}) {
- System.out.println(article.getTitle() + " 被以下用户收藏过:");
- for (User user : article.getUsersWhoFavorited()) {
- System.out.println("- " + user.getUsername());
- }
- }
- }
- }
复制代码
### 代码说明
1. **User 类**:代表用户,包含用户名和用户收藏的文章列表。 `addFavoriteArticle` 方法用于添加收藏的文章,并同时更新文章的收藏用户列表。
2. **Article 类**:代表文章,包含文章标题和收藏该文章的用户列表。 `addUser` 方法用于添加收藏该文章的用户。
3. **Main 类**:主程序示例,创建用户和文章,并演示如何进行收藏操作以及如何显示用户收藏的文章和文章的收藏情况。
### 使用方法
您可以将上述代码复制到 Java IDE 中,运行 `Main` 类以查看输出结果。根据需要,您可以扩展用户和文章的属性及方法,以满足特定需求。
![](static/image/hrline/1.gif)
根据上述 Java 源码,我们可以设计一个 MySQL 数据库表结构来存储用户、文章及其收藏关系。下面是一个可能的数据库设计方案:
### 数据库表结构
1. **用户表 (users)**
- `id` (INT, 主键, 自增): 用户的唯一标识符
- `username` (VARCHAR(255), 唯一): 用户名
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE
);
2. **文章表 (articles)**
- `id` (INT, 主键, 自增): 文章的唯一标识符
- `title` (VARCHAR(255), 唯一): 文章标题
sql
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL UNIQUE
);
3. **收藏表 (favorites)**
- `user_id` (INT, 外键): 用户的唯一标识符,引用 `users` 表
- `article_id` (INT, 外键): 文章的唯一标识符,引用 `articles` 表
- `PRIMARY KEY (user_id, article_id)` : 复合主键,确保同一用户不能重复收藏同一篇文章
- sql
- CREATE TABLE favorites (
- user_id INT,
- article_id INT,
- PRIMARY KEY (user_id, article_id),
- FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
- FOREIGN KEY (article_id) REFERENCES articles(id) ON DELETE CASCADE
- );
复制代码
### 数据库表结构说明
1. **用户表 (users)**:存储用户信息,每个用户有一个唯一的 `id` 和 `username` 。
2. **文章表 (articles)**:存储文章信息,每篇文章有一个唯一的 `id` 和 `title` 。
3. **收藏表 (favorites)**:存储用户与文章之间的收藏关系。通过 `user_id` 和 `article_id` 形成复合主键,确保同一用户不能重复收藏同一篇文章。
### 示例 SQL 语句
以下是一些示例 SQL 语句,用于插入数据和查询收藏信息:
1. **插入用户**
- sql
- INSERT INTO users (username) VALUES ('Alice'), ('Bob');
复制代码
2. **插入文章**
- sql
- INSERT INTO articles (title) VALUES ('Java Programming'), ('Data Structures');
复制代码
3. **插入收藏关系**
- sql
- INSERT INTO favorites (user_id, article_id) VALUES (1, 1), (1, 2), (2, 1);
复制代码
4. **查询用户收藏的文章**
- sql
- SELECT u.username, a.title
- FROM favorites f
- JOIN users u ON f.user_id = u.id
- JOIN articles a ON f.article_id = a.id;
复制代码
5. **查询文章被哪些用户收藏过**
- sql
- SELECT a.title, u.username
- FROM favorites f
- JOIN articles a ON f.article_id = a.id
- JOIN users u ON f.user_id = u.id;
复制代码
通过上述表结构和 SQL 语句,您可以在 MySQL 数据库中实现用户收藏文章的功能。
|
|