== 是用于比较对象的引用地址的,或者说是否指向同一个变量。
equals是比较对象的真实值的面试
char[] 是能够修改的,String是不可变对象,建立以后没法修改,没法删除,只能等到JVM垃圾回收。编程
JDK7 是支持在switch中使用字符串比较的,但Android目前仍是基于JDK6的。数组
int a = Integer.partInt("124");安全
String [] a = aString.split(" ");数据结构
JDK7 中 subString(m, n) 会建立一个新的字符串。多线程
String 不可变对象。
StringBuilder 线程不安全类,速度比StringBuffer快。
StringBuffer 线程安全类,内部使用同步机制。框架
根据实际的使用状况选择合适的数据结构,例如固定大小的仍是须要增长大小的,有重复元素的仍是没有的,须要保持有序仍是不须要,遍历是正向的仍是双向的,插入是在末尾的仍是任意位置的,更多的插入仍是更多的读取,是否须要并行访问,是否容许修改,元素类型是相同的仍是不一样的,等等。另外,还须要尽早考虑多线程,原子性,内存使用量以及性能等因素。性能
不要假设你的集合里元素的数量一直会保持较小,它也有可能随着时间增加。因此,你的集合最好可以给定一个合适的大小。ui
针对接口编程优于针对实现编程。例如,可能在某些状况下,LinkedList是最佳的选择,可是后来ArrayList可能由于性能的缘由变得更加合适
很差的方式线程
ArrayList list = new ArrayList(100);
好的方式,针对接口编程
// program to interface so that the implementation can change List list = new ArrayList(100); List list2 = new LinkedList(100); List emptyList = Collections.emptyList( ); Set emptySet = Collections.emptySet( );
在取得列表的时候,若是返回的结果是空的话,最好返回一个长度为0的集合或者数组,而不要返回null。由于,返回null的话可能能会致使程序错误。调用你的方法的开发人员可能会忘记对返回为null的状况进行处理。
封装好集合:通常来讲,集合都是不可变的对象。因此尽可能不要把集合的成员变量暴露给调用者。由于他们的操做通常都不会进行必要的校验。