String是最原始的,不可变字符序列,效率低,线程不安全
StringBuilder是可变字符序列,效率高,线程不安全
StringBuffer是可变字符序列,效率低,线程安全
电脑自动输出时间格式:yyyy-MM-dd HH:mm:ss
时间格式化类:SimpleDateFormat
正则表达式:
y代表年(year)
m代表月(Month)
w代表年中的周(Number)
W代表月中的周(Number)
D代表年中的天(Number)
d代表月中的天(Number)
F代表月中的星期(Number)
E代表星期中的天(Text)
a代表Am/Pm标记(Text)
H代表一天中的小时(0-23)(Number)
k代表一天中的小时(1-24)(Number)
K代表am/pm中的小时(0-11)(Number)
h代表am/pm中的小时(1-12)(Number)
m代表小时中的分钟(Number)
s代表分钟中的秒数(Number)
S代表毫秒(Number)
z代表时区(General time zone)
Z代表时区(RFC 822 time zone)
G代表Era标示符(Text)
获取当前日历对象:Calender c=Calender.getInstance();
获取当前时间:Date d=c.getTime();
文件:相关记录或放在一起的数据的集合
绝对路径:从系统根目录出发,找文件具体所在的位置
相对路径:此文件相对于另外一个文件的最短路径
枚举是由一组固定的常量组成的类型
容器
Collection是所有集合的接口,它提供了对集合进行排序、遍历等多种算法实现
Collection接口存储一组不唯一,无序的对象
List接口存储一组不唯一,有序(插入顺序)的对象
Set接口存储一组唯一,无序的对象 ;Set存入和取出的顺序不一致
最快去除相同数据用Set,Set踢出重复元素,如果是引用数据类型需要重写HashCode和equals方法
Set相对于List而言没有下标,所以没有Set方法,不能使用普通for循环取值(for each,Iterator)
Map接口存储一组键值对象,提供Key和value映像
ArrayList的优点:遍历元素和随机访问元素的效率比较高,内部实现数组
ArrayList的缺点:添加和删除需要大量移动元素,效率低,按照内容查询效率低
LinkedList的优点:插入和删除时效率较高,内部实现链表
LinkedList的缺点:遍历和随机访问元素效率较低
HashSet的优点:添加速度快,查询速度快,删除速度快
HashSet的缺点:无序
TreeSet采用红黑树的存储结构,要求用户提供排序规则,中的元素需要实现比较接口(Comparble)和compareTo方法
TreeSet的优点:有序(排序后升序)查询速度比 List快
TreeSet的缺点:查询速度没有HashSet快
对于多数据查找和遍历使用ArrayList
对于多数据添加和删除使用LinkedList
for each的缺点:数组不能方便的访问下标值,不要在for each中对变量赋值,它只是临时变量
LinkedHashSet采用哈希表存储结构,同时使用链表维护次序,有序(添加顺序)
泛型:解决数据类型操作不统一产生的异常,更好的保护数据类型
Map中LinkedHashMap是有序的HashMap,速度快
FreeMap是有序的,速度没有Hash快
Set和Map的关系:采用了相同的数据结构,只用于Map的Key储存数据
文件是计算机中存储最小的载体
流是指一串流动的字符,以先进先出方式发送信息的通道
IO输入流:InputStream IO输出流:OutputStream
从数据源到程序是读(输入流)
从程序到数据源或文件是写(输出流)
data source提供原始数据的原始媒介
数据源就像水箱,流就像水管中流着的水流
按区域分:输入流:InputStream和Reader
输出流:OuputStream和Writer
按处理数据单元分:字节流:字节输入流InputStream
字节输出流OuputStream
字符流:字符输入流Reader
字符输出流Writer
节点流功能:直接可以操作数据源或目的地
处理流功能:不能操作数据源或目的地,主要是辅助节点流,提高性能和效率,简化操作
节点流和处理流的联系:节点流处于IO操作的第一线,所有操作必须通过它们进行
文本文件的读写:用FileInputStream和FileOutputStream读写文本文件
用BufferedReader和BufferOutputWriter读写文本文件
二进制文件的读写:用DataInputStream和DataOutputStream读写二进制文件以及基本数据类型数据的读写
对象的读写:用ObjectInputStream和ObjectOutputStream读写对象序列化与反序列化
获取当前开发环境的字符模式:System.out.println(System.getDroperty("file.encoding"));
序列化和反序列化的目的:持久化、将对象在网络上进行传输
序列化是将内存中的对象转换成流
反序列化是将流转换成内存中的对象
NotSerializableException 未实现序列化接口
静态是不能被序列化的
在需要序列化的字段前加上:transient
多线程的优点:提高程序的运行效率
线程是进程中一个单一的连续控制流程
程序(Porgram)是一个指令的集合,是进程里的一个任务或一条命令
进程(Porcess)是个静态的概念,是一个正在运行的程序
线程又称轻量线进程
一个线程可拥有多个并行的concurrent线程
一个进程中至少有一个线程
一个线程中的线程共享相同的内存单元/内存地址空间-->可访问相同的变量和对象,而且它们从同一堆中分配对象-->通信、数据交换、同步操作
线程结束时,进程未必结束,但是进程结束时,线程一定结束
进程包含线程,线程是进程的一部分
进程和线程的区别:进程作为资源分配的单位,而线程是调度和执行的单位
Runnable出现的原因:因为Java是单继承,多实现的继承往往会被占用,而无法通过继承Thread实现多线程,但是可以实现Runnable接口而达到目的
Java实现多继承的两种方法:
1、继承Thread类重写run方法
2、实现Runnable接口重写run方法
继承Thread的优点:1、避免单继承
2、方便共享资源,同一份资源