今日学习目标:
- 深入学习Java中的集合框架,包括高级集合类和集合操作。
- 掌握Java中的I/O流操作,包括文件读写和网络通信。
- 了解Java中的多线程编程基础。
一、集合框架的高级特性
除了基本的集合接口和实现类,Java集合框架还提供了许多高级特性和工具类。
- 迭代器(Iterator)和增强型for循环:用于遍历集合元素。
- 集合的排序和搜索:使用
Collections
类的sort()
方法对List进行排序,使用binarySearch()
方法进行搜索。 - 子集合视图:使用
subList()
方法获取List的子集合,使用subSet()
方法获取Set的子集合。 - 转换集合:使用
Collections2
(来自Google Guava库)等第三方库进行集合的转换和操作。
示例代码:
java复制代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AdvancedCollections {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(2);
numbers.add(9);
// 使用Collections.sort()对List进行排序
Collections.sort(numbers);
System.out.println(numbers); // 输出: [2, 5, 9]
// 使用subList()获取子集合
List<Integer> subList = numbers.subList(1, 3);
System.out.println(subList); // 输出: [5, 9]
}
}
二、I/O流操作
Java的I/O流用于处理数据的输入和输出,包括文件读写和网络通信。
- 字节流(Byte Streams):以字节为单位处理数据,如
FileInputStream
和FileOutputStream
。 - 字符流(Character Streams):以字符为单位处理数据,如
FileReader
和FileWriter
。 - 缓冲流(Buffered Streams):提高I/O性能,如
BufferedInputStream
和BufferedOutputStream
。 - 转换流(Transformation Streams):如
InputStreamReader
和OutputStreamWriter
,用于在字节流和字符流之间进行转换。 - 对象流(Object Streams):如
ObjectInputStream
和ObjectOutputStream
,用于序列化和反序列化对象。
示例代码:
java复制代码
import java.io.*;
public class IOExample {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("Hello, World!");
} catch (IOException e) {
e.printStackTrace();
}
try (FileReader reader = new FileReader("output.txt")) {
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、多线程编程基础
Java支持多线程编程,允许同时执行多个任务。
- 线程的状态:新建(NEW)、就绪(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)。
- 创建线程:通过继承
Thread
类并重写run()
方法,或者实现Runnable
接口并重写run()
方法。 - 线程控制:使用
start()
方法启动线程,使用sleep()
方法使线程休眠,使用join()
方法等待线程结束。 - 线程同步:使用
synchronized
关键字或Lock
接口实现线程同步,避免数据不一致问题。
示例代码:
java复制代码
public class SimpleThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("Thread running: " + i);
try {
sleep(1000); // 线程休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
SimpleThread thread = new SimpleThread();
thread