1、高级类定义
非专用对象,比如像IO操作、多线程操作、网络编程、GUI操作等等,都有专门作用的API,或者想打印机都属于专用API。除此之谓的公共性质的对象,称之为高级对象
比如:字符串操作、正则表达式、集合类、日期处理、数值处理等等,都算高级类应用
2、字符串
- String:不可变序列
- StringBuilder:可变序列,线程不安全
- StringBuffer:可变序列,线程安全
1 | StringBuffer str = new StringBuffer(); |
3、Set,HashSet,TreeSet
- 特点:不按add顺序、不可重复
- 不可重复的判断标准:hashcode相等,并且equals相等。
hashcode对hash结构的数据存储的性能影响巨大。 - TreeSet:是按加入值的自然序排序,当然你可以实现comparator接口来实现自定义排序。
- HashSet底层是数组结构,借助Hashmap来实现。TreeSet底层是链表结构,它是借助TreeMap.
- Set本质就是一个value=null或者是不变值的map。
(以上两者均是线程不安全)
4、List,ArrayList,LinkedList及Vector
- List的特点:加入有序、可重复。
- 可重复的判定标准:是否equals为唯一判断标准
- ArrayList:底层是数组,遍历快、随机按下标访问快,但是删除元素肯定是慢的。
- LinkedList:底层是链表,删除快,但遍历慢。
- Vector: arrayList的前身,主要区别在于它是线程安全的。
ArrayList和LinkedList都是线程不安全的。
5、Map,HashMap及HashTable
- Map的特点:键值对形式。
- HashMap的底层是数组,TreeMap的底层是链表。
- HashTable:是线程安全的HashMap。
关键点
内存泄露
:程序运行过程中,出现了不可被回收,但又永久占空间的内存地址。以HashSet为例,底层为数组。
线程安全
:线程安全和不安全的唯一判别标准:在访问对象内部有没有可能被两个线程同时访问的非局部变量。像ArrayList,LinkedList,HashSet,HashTable,HashMap等等
性能
:
1、当字符串频繁变化长度时,应用StringBuilder或StringBuffer
2、关于集合类,能用数组不要用集合,能用Set就不要用Map