目录
API
java.util.*
set集合
无序且不可重复
·HashSet:
底层:哈希表
JDK1.7之前哈希表(数组+单链表)
JDK1.7之后哈希表(数组+链表+红黑二叉树)
·LinkedHashSet:
底层:哈希表+链表
方法同HashSet
·TreeSet
底层:红黑二叉树(实现了自然排序,查询效率较高,添加元素效率低)
方法:
E ceiling(E e)
返回此集合中最小元素大于或等于给定元素,如果没有此元素,则返回 null 。
E higher(E e)
返回严格大于给定元素的该集合中的最小元素,如果没有此元素则返回 null 。
E floor(E e)
返回此集合中最大的元素小于或等于给定元素,如果没有这样的元素,则返回 null 。
E lower(E e)
返回这个集合中最大的元素严格小于给定的元素,如果没有这样的元素,则返回 null 。
E last()
返回此集合中当前的最后(最高)元素。
E first()
返回此集合中当前的第一个(最低)元素。
Collections
Collection集合的包装类
方法:
Lambda表达式(Java8新特性)
面向函数编程
组成部分:
1.参数()
-参数类型可以省略
-当且仅当只有一个参数的时候括号可以省略
primes.forEach(element -> { factor++; });
2.->
3.函数体{}
-只有一个表达式的时候大括号可以省略
-只有一条语句的时候大括号可以省略
list.forEach(n -> System.out.println(n));
-当return的返回值是一个表达式的时候,return可以省略
4.方法引用
-类名: :方法名
list.forEach(System.out::println);
-类名: : new
Supplier<Student> s = Student::new;
-对象 : :方法名
TreeSet<String> set = new TreeSet<>(String::compareTo);
Stream
定义:
Java 8引入了Stream流的概念,它是对集合对象(Collection)进行操作的高级抽象
特点:
-
Stream流是对集合对象的一种封装,使得可以用函数式编程的方式对集合进行操作。
-
Stream流的操作是延迟执行的,只有在终端操作时才会触发执行。
-
Stream流可以进行并行操作,提高了程序的性能。
创建方式
1.通过集合创建流:可以通过集合类的stream()方法或parallelStream()方法来创建一个流
List<String> list = Arrays.asList(“a”, “b”, “c”);
Stream<String> stream = list.stream();
2.通过数组创建流:可以通过Arrays类的stream()方法来创建一个数组流
String[] array = {“a”, “b”, “c”};
Stream<String> stream = Arrays.stream(array);
3.通过Stream.of()方法创建流
Stream<String> stream = Stream.of(“a”, “b”, “c”);
4.通过Stream.generate()方法创建流
Stream<String> stream = Stream.generate(() -> “element”);
5.通过Stream.iterate()方法创建流
Stream<Integer> stream = Stream.iterate(0, n -> n + 1);
方法
Map
映射关系: key --value(键-值对象)
key是唯一的,不可重复的
HashMap:哈希表
HashMap类大致相当于Hashtable ,除了它是不同步的(线程不安全),并允许null(键和值都允许)
构造:
HashMap<String,String> maps = new HashMap<>();
方法:
put(K,V):往map中添加键和与之对应的值(当一个键被添加多个值时会将前一个值覆盖)
get(K):取得键对应的值
keyset():取得所以key的set集合
values():取得所有value的Collection集合
containsValue(V):map中是否包含值
cotainsKey(K):map中是否包含键
foreach(lambda表达式):对map进行遍历操作
putAll(map):将该map的所有内容复制到本map中
remove(K):删除键
remove(K,V):删除该键对应的值
replace(K,V)将键对应的值替换为传入的值
Collection<V> values()返回此地图中包含的值的Collection视图。
HashTable
该类实现了一个哈希表,它将键映射到值。 任何非null
对象都可以用作键值或值(线程安全)。为了从散列表成功存储和检索对象,用作键的对象必须实现hashCode
方法和equals
方法
HashMap和HashTable的区别
1.HashTable是线程安全的,而HashMap不是。
2.HashMap允许键和值都为null,而HashTable不允许。
3.HashMap的性能通常比HashTable要好
方法:
Enumeration
LinkedHashMap
链表+哈希表
TreeMap
红黑二叉树
ConcurrentHashMap
支持检索的完全并发性和更新的高预期并发性的哈希表
总结
1. HashMap:底层使用哈希表实现,允许键和值为null。
2. HashTable:底层使用哈希表实现,线程安全,不允许键和值为null。
3. TreeMap:底层使用红黑二叉树实现,按照键的自然排序进行排序。
4. ConcurrentHashMap:线程安全的哈希表实现。
集合泛型
作用:限制集合接收对象的类型
1.泛型类定义:
[访问修饰符] class 类名<泛型..>{}
2.泛型方法:
[访问修饰符] <泛型> 返回值类型 方法名(泛型类型 参数名){}
泛型上限:
- 格式: 类型名称<? extends 类> 对象名称`
- 意义: 只能接收该类型及其子类
泛型上限:
- 格式:`类型名称<? super 类> 对象名称
- 意义:只能接收该类型及其父类类型
Java.io
File类
作用:读写文件数据和文件属性
File:表示文件或者目录
文件可以认为是相关记录或放在一起的数据的集合
构造方法:
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。File(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例。
方法:
boolean canRead()测试应用程序是否可以读取由此抽象路径名表示的文件。
boolean canWrite()测试应用程序是否可以修改由此抽象路径名表示的文件。
boolean createNewFile()当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
static File createTempFile(String prefix, String suffix)在默认临时文件目录中创建一个空文件,使用给定的前缀和后缀生成其名称。
boolean delete()删除由此抽象路径名表示的文件或目录。
boolean exists()测试此抽象路径名表示的文件或目录是否存在。
File getAbsoluteFile()返回此抽象路径名的绝对形式。
String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。
String getName()返回由此抽象路径名表示的文件或目录的名称。
String getParent()返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。
File getParentFile()返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录
boolean isFile()测试此抽象路径名表示的文件是否为普通文件。
long length()返回由此抽象路径名表示的文件的长度。
String[] list()返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
File[] listFiles(FileFilter filter)返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
boolean mkdir()创建由此抽象路径名命名的目录。
boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
IO流
Fil类只能创建和删除文件,对文件的属性进行操作,不能修改文件
IO流对象并不会被垃圾回收器回收
在结束IO流时要释放内存,使用close()方法
1.字节流(适合读取图片,音频视频等原始字节文件)
·FileInputStream
输入流如果文件不存在,则抛出FileNotFoundException。
·FileOutputStream
输出流如果文件不存在,则自动创建文件然后写入数据。
2.字符流
字符流可以操作文本文件和二进制文件
·FileReader(输入流)
·FileWiter(输出流)
3.缓冲流(字符流的一种)
高效读取
·BufferedReader
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取
public class Bf {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("C:\\Users\\27035\\Desktop\\cxy.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String str= null;
//按行读取
while ((str = bufferedReader.readLine()) != null){
System.out.println(str);
}
//先开流的后关流
bufferedReader.close();
fileReader.close();
}
}
·BufferedWriter
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入
public class Bf {
public static void main(String[] args) throws IOException {
//写入操作会创建文件但是不会创建目录
FileWriter fileWriter = new FileWriter("C:\\Users\\27035\\Desktop\\cxy.txt",true);
BufferedWriter bw = new BufferedWriter(fileWriter);
String str= "hello world";
bw.newLine();
bw.write(str);
bw.write(str);
//先开流的后关流
bw.close();
fileWriter.close();
}
}
BufferedInputStream
BufferedOutputStream
4.内存流
读写内存数据
ByteArrayOutputStream
ByteArrayInputStream
public class By {
public static void main(String[] args) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write("Grace".getBytes());
out.flush();
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
byte[] byt = new byte[1024];
in.read(byt);
System.out.println(new String(byt));
}
}
CharArrayWriter
CharArrayReader
public class Ca {
public static void main(String[] args) throws IOException {
CharArrayWriter writer = new CharArrayWriter();
writer.write("hello world".toCharArray());
writer.flush();
char[] ca = new char[writer.size()];
CharArrayReader reader = new CharArrayReader(writer.toCharArray());
reader.read(ca);
System.out.println(new String(ca));
}
}
转换流
字节流-->字符流
InputStreamReader
OutputStreamWriter
打印流(输出流)
PrintStream:为另一个输出流添加了功能,即能够方便地打印各种数据值的表示
PrintWriter:将对象的格式表示打印到文本输出
对象流(没有字符输入或输出流)
注意:
1.序列化不会写出任何不实现java.io.Serializable接口的对象的字段(Serializable 默认的序列化)
2.实现Externalizable接口允许对象完全控制对象的序列化表单的内容和格式。
调用Externalizable接口writeExternal和readExternal的方法来保存和恢复对象的状态
3.static 或者 transient 修饰的字段是不能够被序列化
ObjectOutputStream
字节流 (对象信息持久化) -> 程序中 -> java对象信息 反序列化
ObjectInputStream:
ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储