JAVA高级类使用技巧

1、高级类定义

   非专用对象,比如像IO操作、多线程操作、网络编程、GUI操作等等,都有专门作用的API,或者想打印机都属于专用API。除此之谓的公共性质的对象,称之为高级对象
   比如:字符串操作、正则表达式、集合类、日期处理、数值处理等等,都算高级类应用

2、字符串

  • String:不可变序列
  • StringBuilder:可变序列,线程不安全
  • StringBuffer:可变序列,线程安全
1
2
StringBuffer str = new StringBuffer();
str.append("1234");

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