Java组件介绍

1.String

string对象的不变性、被final关键字修饰。

使用charat方法替代startwith/endwith方法(提高性能)

使用buffer(方法同步,性能较差)和builder(同步,性能较好)来替换string

equals(不可以比较基本数据类型,重写方法是为了比较对象的值是否相同,否则则比较对象的引用地址)

==(基本类型比较值,引用类型比较地址)

equals方法为true的两个对象一定相等,hashcode方法相同的两个对象不一定相同

2.list

* 1.ArrayList(数组实现、线程不同步.初始大小为10,每次扩容为1.5倍)

* 2.Linkedlist(循环双向链表:header+link1+link2+header)

* 3.vector(数组实现、线程同步)

3.map

* 1.hashtable (线程同步、不允许key或value使用null值)

* 2.hashmap (线程不同步、数组实现、初始大小16、负载因子0.75、数据存放无序)

* 3.linkedhashmap(数据存放有序)

* 4.treemap(实现sortedMap接口对元素进行排序、基于红黑树实现)

4.set(元素不重复、基于对map的封装)

* 1.hashset

* 2.linkedHashSet

* 3.TreeSet

集合优化

* 1.for循环中重复的代码可以提取到外部。例如list.size()

* 2.省略相同操作

* 3.调用元素避免调用方法

RandomAccess接口:实现该接口的对象即支持快速随机访问的对象

* (基于数组的list实现该接口,可直接使用get方法获取元素、性能较好

* 基于链表的未实现,需通过迭代器进行元素迭代、性能较差)

5. Java NIO:(写操作类似于向水瓶中蓄水,读操作类似于从水瓶中取水。渠道等同于吸管的作用)

*1.打开渠道,获取buffer

* 2.读取文件,获取channel

* 3.给buffer分配大小

* 4.channel数据读取到buffer

* 5.关闭channel

*scatter(分散)/gather(聚集)— 一个channel对应多个gather:传输数据分散处理。以数组形式存储

* selecter:一个线程管理多个channel

tips:

* 1.try/catch移到循环体之外

* 2.位运算替代乘除法

* 3.提取重复表达式

* 4.对于重量级对象,使用clone()替代new

* 5.使用静态方法替代实例方法

Java 引用

*引入引用的目的:人为控制对象生命周期、方便JVM进行回收

*强(所指对象不会被系统回收)》软(基于内存进行存活、网页、图片缓存)》弱(只要发现就回收)》虚(跟踪垃圾回收过程)