java快速入门 (9)

List接口是一个有序, 元素可重复的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。

ArrayList

底层数据结构是数组,查改快,增删慢。

非线程安全,效率高

方法:

image-20210728173620540

排序

import java.util.Collections; // 引入 Collections 类 Collections.sort(sites); *// 字母排序*

Vector

底层数据结构是数组,查改快,增删慢。

线程安全,效率低

LinkedList

底层数据结构是链表,查改慢,增删快。

非线程安全,效率高

以下情况使用 LinkedList :

你需要通过循环迭代来访问列表中的某些元素。

需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

LinkedList 继承了 AbstractSequentialList 类。

LinkedList 实现了 Queue 接口,可作为队列使用。

LinkedList 实现了 List 接口,可进行列表的相关操作。

LinkedList 实现了 Deque 接口,可作为队列使用。

LinkedList 实现了 Cloneable 接口,可实现克隆。

LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

方法:

image-20210728174512617

Set

Set 接口存储一组唯一,无序的对象。

HashSet

底层数据结构是哈希表。(无序,唯一)

依赖两个方法:hashCode()和equals() 保证元素唯一性

// 引入 HashSet 类 import java.util.HashSet; public class RunoobTest { public static void main(String[] args) { HashSet<String> sites = new HashSet<String>(); sites.add("Google"); sites.add("Runoob"); sites.add("Taobao"); sites.add("Zhihu"); sites.add("Runoob"); // 重复的元素不会被添加 System.out.println(sites); } }

以上代码只会输出一个Runoob。

LinkedHashSet

底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

1.由链表保证元素有序

2.由哈希表保证元素唯一

TreeSet

底层数据结构是红黑树。(唯一,有序)

如何保证元素排序的呢? 自然排序,比较器排序

Set和List的区别

Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。

Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>

List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector>

image-20210728172343233

Map与Collection是并列关系。Map提供键(key)到值(value)的映射。一个Map中不能包含相同的键,每个键只能映射一个值。

HashMap

无序,非线程安全,效率高。HashMap允许null值(key和value都允许)。

image-20210728174945196

HashTable

无序,线程安全,效率低。除构造函数外,HashTable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。HashTable不允许null值(key和value都允许)。

TreeMap

有序,非线程安全,效率高(O(logN)),但比不上HashMap (O(1))。

11.流(Stream)、文件(File)和IO

Java.io 包中定义了多个流类型(类或抽象类)来实现输入/输出功能;

img

可以从不同的角度对其进行分
类:
1.按数据流的方向不同可以分为输入流【InputStream(字节流),Reader(字符流)】和输出流【OutPutStream(字节流),Writer(字符流)】
2.按照处理数据单位不同可以分为字节流【一个字节(Byte)是8位(bit))】和字符流【一个字符是2个字节】
3.按照功能不同可以分为节点流和处理流

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfzgp.html