Java11.13

目录

API

java.util.*

set集合

·HashSet:

·LinkedHashSet:

·TreeSet

方法:

Collections

方法:

Lambda表达式(Java8新特性)

Stream

定义:

特点:

创建方式

方法

Map

HashMap:哈希表


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读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值