数据结构,编程的灵魂

数据结构,是程序设计的基石,而数组与集合,则是这门艺术中最为璀璨的明珠。它们的存在,让数据的组织和管理变得有序而高效。本文将深入剖析这些概念,通过丰富示例与实战演练,带你领略数据结构的无穷魅力。

第一章:数组——数据的基石

数组是数据结构中最基本的形式,它提供了一种连续存储相同类型元素的方式。然而,它的灵活性有限,一旦声明,长度便不可改变。

示例代码:

int[] numbers = {1, 2, 3, 4, 5}; // 初始化数组
for (int i = 0; i < numbers.length; i++) {
    System.out.print(numbers[i] + " ");
}
// 输出: 1 2 3 4 5

第二章:List——动态数组的力量

List集合克服了数组长度固定的局限,提供了动态增长与缩减的能力。它是实现队列、栈等高级数据结构的基础。

示例代码:

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.remove(0); // 删除第一个元素
System.out.println(list); // 输出: [2]

第三章:Set——无序且不重复的集合

Set集合确保了元素的唯一性,非常适合用于去重和成员检测。不同的Set实现(如HashSet与TreeSet)具有各自的特点和优势。

示例代码:

Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(1); // 不会被添加
System.out.println(set); // 输出: [1, 2]

第四章:Map——键值对的完美匹配

Map集合通过键值对的形式存储数据,提供了一种快速查找和更新数据的方法。HashMap和TreeMap是两种常见的Map实现。

示例代码:

Map<String, Integer> map = new HashMap<>();
map.put("One", 1);
map.put("Two", 2);
System.out.println(map.get("One")); // 输出: 1

构建一个图书管理系统

为了加深理解,我们将构建一个简单的图书管理系统。系统将利用数组、List、Set和Map来存储和管理图书信息,包括添加、删除、搜索图书等功能。

实战任务:

  1. 使用List存储图书列表。
    1. 使用Set存储已借阅的图书。
    1. 实现图书的添加、删除和搜索功能。

首先,定义Book类来存储图书的信息:

public class Book {
    private String title;
    private String author;
    private int year;
    
    public Book(String title, String author, int year) {
        this.title = title;
        this.author = author;
        this.year = year;
    }
    
    // Getter 和 Setter 方法
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public String getAuthor() { return author; }
    public void setAuthor(String author) { this.author = author; }
    public int getYear() { return year; }
    public void setYear(int year) { this.year = year; }
    
    @Override
    public String toString() {
        return "Title: " + title + ", Author: " + author + ", Year: " + year;
    }
}

接下来,创建图书管理系统的主类:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

public class LibrarySystem {
    private ArrayList<Book> books;
    private HashMap<String, Book> bookMap;
    private HashSet<String> borrowedBooks;

    public LibrarySystem() {
        books = new ArrayList<>();
        bookMap = new HashMap<>();
        borrowedBooks = new HashSet<>();
    }

    // 添加图书
    public void addBook(Book book) {
        if (!bookMap.containsKey(book.getTitle())) {
            books.add(book);
            bookMap.put(book.getTitle(), book);
            System.out.println("Book added successfully.");
        } else {
            System.out.println("Book already exists in the library.");
        }
    }

    // 删除图书
    public void removeBook(String title) {
        if (bookMap.containsKey(title)) {
            if (!borrowedBooks.contains(title)) {
                books.remove(bookMap.get(title));
                bookMap.remove(title);
                System.out.println("Book removed successfully.");
            } else {
                System.out.println("Cannot remove book as it is currently borrowed.");
            }
        } else {
            System.out.println("Book not found in the library.");
        }
    }

    // 借阅图书
    public void borrowBook(String title) {
        if (bookMap.containsKey(title)) {
            if (!borrowedBooks.contains(title)) {
                borrowedBooks.add(title);
                System.out.println("Book borrowed successfully.");
            } else {
                System.out.println("Book is already borrowed.");
            }
        } else {
            System.out.println("Book not found in the library.");
        }
    }

    // 归还图书
    public void returnBook(String title) {
        if (borrowedBooks.contains(title)) {
            borrowedBooks.remove(title);
            System.out.println("Book returned successfully.");
        } else {
            System.out.println("Book was not borrowed.");
        }
    }

    // 查询图书
    public Book searchBook(String title) {
        if (bookMap.containsKey(title)) {
            return bookMap.get(title);
        } else {
            System.out.println("Book not found in the library.");
            return null;
        }
    }

    // 显示所有图书
    public void displayAllBooks() {
        for (Book book : books) {
            System.out.println(book);
        }
    }
}

最后,我们可以创建一个测试类来演示系统的工作流程:

public class LibraryTest {
    public static void main(String[] args) {
        LibrarySystem system = new LibrarySystem();
        
        system.addBook(new Book("Java", "张三", 2023));
        system.addBook(new Book("Python", "李四", 2022));
        system.addBook(new Book("C++", "王五", 2021));
        
        system.displayAllBooks();
        
        system.borrowBook("Java");
        system.returnBook("Java");
        
        system.removeBook("Python");
        
        system.displayAllBooks();
    }
}