java集合框架的介绍
- java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口 。
- java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中。
- java.util.Collections类,提供了集合进行排序、遍历等多种算法实现。
接口介绍:
- Collection 接口存储一组不唯一,无序的对象。
- List 接口存储一组不唯一(可以重复),有序(插入顺序)的对象。
- Set 接口存储一组唯一,无序的对象。
- Map接口存储一组键值对象,提供key到value的映射。
HashSet
- HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
- HashSet 允许有 null 值。
- HashSet 是无序的,即不会记录插入的顺序。
HashMap
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap 是无序的,即不会记录插入的顺序。
ArrayList (基于数组)
实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
常用方法
LinkedList(基于链表)
插入、删除操作频繁时,可使用LinkedList来提高效率。 LinkedList提供对头部和尾部元素进行添加和删除操作的方法 ,也可以在集合任何位置(头部、中间、尾部)添加、获取、删除集合对象。
常用方法
Collection接口与collections类的比较(简答题)
- Collection是集合类的顶级接口。它提供对集合对象进行基本操作的通用接口方法。它的直接继承接口有List,Set等。
- Collections是一个包装类。它包含有各种有关集合操作的静态多态方法。它不能被实例化,起到一个工具类的作用。常见的如对集合元素进行排序、搜索以及线程安全等各种操作,服务于Java的Collection框架。
ArrayList和LinkedList 比较(简答题)
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
- 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList移动指针。
- 对于新增和删除操作add和remove,LinedList更快,因为ArrayList移动数据。
迭代器Iterator的作用
主要用于遍历Collection 集合中的元素。
for与iterator的区别
- for迭代元素简单,iterator迭代起来稍微复杂。
- for在迭代时,不能删除元素,iterator可以,原因:迭代器的remove操作删除的是最近一次由next操作获取的元素,而不是当前游标所指向的元素。
Properties集合
Properties集合操作字符串的特有方法:
- Object setProperty(String key, String value) 调用 Hashtable 的方法put。
- String getProperty(String key) 通过key找到value值,此方法相当于Map集合中的get(key)方法。
字符流、字节流的操作
- IO提供了两个带缓冲的字节流,分别是:BufferedInputStream 、BufferedOutputStream。
- 在JDK中提供了两个类可以将字节流转化为字符流,它们分别是InputStreamReader 和OutputStreamWriter。
File类
在java程序中,通过java.io.File 类对文件进行基本的操作。
File file = new File( String pathname );
pathname表示文件或目录,如d:\aa.txt 或 d:/aaa.txt 或 d:\\aa 或d:/aa
方法名称 | 说明 |
---|---|
boolean exists( ) | 判断文件或目录是否存在 |
boolean isFile( ) | 判断是否是文件 |
boolean isDirectory( ) | 判断是否是目录 |
String getPath( ) | 返回此对象表示的文件的相对路径名 |
String getAbsolutePath( ) | 返回此对象表示的文件的绝对路径名 |
String getName( ) | 返回此对象表示的文件或目录的名称 |
boolean delete( ) | 删除此对象指定的文件或目录 |
boolean createNewFile( ) | 创建名称的空文件,不创建文件夹 |
long length() | 返回文件的长度,单位为字节, 如果文件不存在,则返回 0L |
文件的读写操作
-
InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象。
-
Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串。
操作流程
- 使用File类打开一个文件。
- 通过字节流或字符流的子类,指定输出位置。
- 进行读、写操作。
- 关闭输入、输出。
演示字节流的使用
package javaRevise.io;
import java.io.*;
/**
* @author WuYongheng
* @date 2021/12/4
* @description 演示字节流的使用
*/
public class InputStreamTest1 {
public static void main(String[] args) throws IOException {
File f = new File("D://aa.txt");
OutputStream out = new FileOutputStream(f);//如果文件不存在会自动创建
// 开启追加模式 append:true
// OutputStream out = new FileOutputStream(f,true);
String str = "Hello Java";
byte[] a = str.getBytes(); //因为是字节流,所以要转化成字节(byte)数组进行输出
out.write(a);
out.close();
// 写完之后进行读操作
InputStream in = new FileInputStream(f);
byte[] b = new byte[20];
int len = in.read(b);
in.close();
System.out.println("读取文件内容输入到控制台:");
System.out.println(new String(b, 0, len));
}
}
演示字符流的使用
package javaRevise.io;
import java.io.*;
/**
* @author WuYongheng
* @date 2021/12/4
* @description 演示字符流的使用
*/
public class InputStreamTest2 {
public static void main(String[] args) throws IOException {
File f = new File("D://bb.txt");
Writer out = new FileWriter(f);
String str = "Hello 这是字符流";
out.write(str);
out.close();
// 写完之后进行读操作
Reader in = new FileReader(f);
char[] c = new char[20];
int len = in.read(c);
in.close();
System.out.println("读取文件内容输入到控制台:");
System.out.println(new String(c, 0, len));
}
}
理解关闭操作
就像我们玩星露谷一样,一天结束之后要睡觉才会提交最新数据。