MIT_6.031之基本Java

1. 可变与不可变对象

  • 不可变对象
    在 Java 中,不可变对象的状态在创建后不能被修改。

    • String 是不可变对象。每次对字符串进行操作时(例如拼接、截取等),都会创建一个新的字符串对象,原对象保持不变。

      1
      2
      String s1 = "Hello";
      s1 = s1 + " World"; // 创建了一个新的字符串 "Hello World",原字符串 "Hello" 不变
  • 可变对象
    StringBuilder 是一个可变对象,可以在原对象的基础上修改内容,而不需要创建新的对象。常用于需要频繁修改字符串的场景,性能更好。

    1
    2
    StringBuilder sb = new StringBuilder("Hello");
    sb.append(" World"); // 修改了原对象的内容,不会创建新对象

  • final 关键字

    • final 用于声明不可变引用,即变量本身的引用不能修改,但如果引用指向的是可变对象(如 StringBuilder),对象的内容可以修改。

      1
      2
      3
      final StringBuilder sb = new StringBuilder("Hello");
      sb.append(" World"); // 允许修改 sb 指向的内容
      sb = new StringBuilder("New"); // 编译错误:不能改变 sb 的引用

2. Java 集合框架

  • List(列表):

    • List 是有序的集合,可以包含重复的元素。
    1
    2
    3
    4
    5
    6
    List<String> lst = new ArrayList<>();
    lst.add("Hello");
    int count = lst.size(); // 获取列表的大小
    if (lst.isEmpty()) {
    System.out.println("列表为空");
    }
  • Map(映射):

    • Map 是键值对的集合,每个键唯一,键与值通过映射关联。
    1
    2
    3
    4
    5
    6
    Map<String, Integer> map = new HashMap<>();
    map.put("Alice", 10);
    Integer val = map.get("Alice"); // 获取键对应的值
    if (map.containsKey("Bob")) {
    map.remove("Bob"); // 如果键存在,则删除该键及其关联的值
    }
  • Set(集合):

    • Set 是无序的集合,不允许重复的元素。
    1
    2
    3
    Set<Integer> s1 = new HashSet<>();
    s1.add(1);
    s1.contains(1); // 判断集合中是否存在某个元素

3. 快速创建数组

  • 可以快速地用初始化语法创建数组:

    1
    String[] arr = {"a", "b", "c"};
    • 还可以使用 Arrays.asList 将数组转换为列表:
    1
    List<String> list = Arrays.asList("a", "b", "c"); // 创建一个长度固定的列表

4. 遍历 Map

  • 使用 keySet() 遍历 Map 中的键,并通过 get() 方法获取键对应的值:

    1
    2
    3
    4
    5
    6
    7
    Map<String, Integer> turtles = new HashMap<>();
    turtles.put("turtle1", 100);
    turtles.put("turtle2", 200);

    for (String key : turtles.keySet()) {
    System.out.println(key + ": " + turtles.get(key));
    }

5. Java I/O (输入输出)

  • File
    表示磁盘上的文件或目录,提供方法来测试文件的状态、删除文件等。

    1
    2
    3
    4
    File file = new File("test.txt");
    if (file.exists() && file.canRead()) {
    System.out.println("文件可读");
    }
  • FileReader
    用于从文本文件中读取字符流。常与 BufferedReader 配合使用。

    1
    FileReader reader = new FileReader("test.txt");
  • BufferedReader
    提供缓冲机制来提高读取效率,支持按行读取。

    1
    2
    3
    4
    5
    6
    BufferedReader br = new BufferedReader(new FileReader("test.txt"));
    String line;
    while ((line = br.readLine()) != null) {
    System.out.println(line);
    }
    br.close();

不可变对象(如 String)在修改时会创建新对象,可变对象(如 StringBuilder)则直接修改。

集合框架 提供了 ListMapSet 等不同的数据结构来满足不同需求。

Java I/O 提供了对文件的读取和写入操作,常见类包括 FileFileReaderBufferedReader