集合
一、集合的作用
数组本身有一旦初始化容量不能改变;数组中元素数据类型必须一致,只能通过下标获取对应的数据 而下标只能int类型等缺点。为了弥补这些不足,从而设定了集合。
集合类:就是一个可以自动扩容的容器,可以存放各种引用类型。
泛型集合:就是在构造集合时使用<>标明集合中存放的数据类型,该类型只能是引用类型。
二、Java集合框架的主要接口和类
1. 线性集合:
Collection:
顶级接口,定义了集合中常用的方法
1. List:
有序集合(添加顺序与读取顺序一致),其中的内容可以重复
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
ArrayList:
基于数组,在随机访问时效率较高,ArrayList完全实现了List中的方法。
LinkedList:
基于链表,在插入和删除时效率较高,LinkedList额外添加了操作首尾的六个方法。
2. Set:
无序集合(添加的顺序与读取的顺序不一致),其中的内容不能重复
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // 重复元素不会被添加进去
HashSet:
根据hash算法进行数据存放,没有下标,底层使用的HashMap
2. 键值对集合:
Map:
键值相对应的集合,每个键最多对应一个值。
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
HashMap:
key不能重复,key重复则value被覆盖,key的值可以为null,有且只有一个。
IO流
在Java中,IO流(Input/Output streams)是用于处理输入和输出数据的重要机制。
一、Java IO流的分类:
根据流向不同分为输入流(把硬盘中的输入读入到程序中)和输出流(把程序中的数据写入到硬盘)。根据读取的内容分为字节流和字符流。
字节流(Byte Streams)
InputStream
:用于从各种数据源(如文件、网络连接)读取字节数据。OutputStream
:用于向各种目的地(如文件、网络连接)写入字节数据。
// 示例:使用字节流读写文件
InputStream inputStream = new FileInputStream("input.txt");
OutputStream outputStream = new FileOutputStream("output.txt");
字符流(Character Streams)
Reader
:用于从各种数据源读取字符数据。Writer
:用于向各种目的地写入字符数据。
// 示例:使用字符流读写文件
Reader reader = new FileReader("input.txt");
Writer writer = new FileWriter("output.txt");
二、主要特点和用途
-
缓冲机制:Java IO流支持缓冲机制,能够提高读写效率,特别是在处理大文件时尤为重要。
-
字节与字符的转换:Java提供了字符流和字节流之间的桥梁类(如
InputStreamReader
和OutputStreamWriter
),方便进行字节到字符的转换。 -
文件操作:可以通过IO流读取和写入文件,包括文本文件和二进制文件。
-
网络通信:可以使用IO流进行网络通信,通过
Socket
类配合字节流或字符流实现数据传输。 -
序列化:Java IO流支持对象的序列化和反序列化,能够方便地将对象转换为字节流进行持久化存储或网络传输。
三、使用示例
下面是一个简单的示例,演示了如何使用字符流读取文件内容并输出到控制台:
import java.io.*;
public class ReadFileExample {
public static void main(String[] args) {
try (Reader reader = new FileReader("input.txt");
BufferedReader bufferedReader = new BufferedReader(reader)) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个示例使用了 FileReader
和 BufferedReader
类来逐行读取文本文件中的内容,并将每行内容输出到控制台。
总结来说,Java的IO流提供了灵活、高效的数据读写方式,能够满足各种输入输出的需求,是Java编程中不可或缺的基础组件之一。