最近阅读java编程思想的第五版这本书,用来记录一些自己的体会吧
1.存储区域速度排序,CPU>栈>堆>常量存储>非RAM存储,尽量用局部变量存在栈中,避免全局变量
2.高精度计算附用BigInteger和BigDecimal,牺牲速度还来精度
3.尽量少用new 创建新对象,分配存储空间的过程会影响性能
4.用完后要关闭流,释放资源,防止造成不良后果
5.尽量重用对象
6.懒加载,需要的时候创建对象
7.try catch 不要在for while中使用,放在外面
8.能估计的范围内,尽量指定数组的长度,不然降低代码运行效率,浪费存储空间
9.用位移操作乘除法,不要再循环内创建对象,for循环中可能创建i*j次对象,消费内存,在外面创建好对象
10.为了提高效率和类型检查,多用Array,无法估计数组大小则用ArrayList
11.必要的地方用单例模式
12.同步代码块代替同步方法
13.使用带缓冲的输入输出流
14.顺序插入随机访问用ArrayList 删除和中间插入用LinkedList
15.字符串比较:写if(1.equals(str)),常量写前面避免空指针异常
16.不使用的数据要及时清理掉,不然系统内存泄漏风险
17.toString()代替String.valueOf
18.遍历Map
public static void main(String[] args)
{
HashMap<String, String> sb = new HashMap<String, String>();
sb.put("傻逼", "杨晟");
Set<Map.Entry<String, String>> entrySet = sb.entrySet();
Iterator<Map.Entry<String, String>> iter = entrySet.iterator();
while (iter.hasNext())
{
Map.Entry<String, String> entry = iter.next();
System.out.println(entry.getKey() + "\t" + entry.getValue());
}
}
try
{
a.close();
b.close();
}
catch (Exception e)
{
...
}
建议修改为:
try
{
a.close();
}
catch (Exception e)
{
...
}
try
{
b.close();
}
catch (Exception e)
{
...
}
//如果a或者b中一个抛出异常了,那就全catch了另一个执行不了了
20.使用ThreadLocal前或者后一定要remove一下,不然很可能set或者get上一个线程的内容
21.
// reuse/SprinklerSystem.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Composition for code reuse
class WaterSource {
private String s;
WaterSource() {
System.out.println("WaterSource()");
s = "Constructed";
}
@Override
public String toString() { return s; }
}
public class SprinklerSystem {
private String valve1, valve2, valve3, valve4;
private WaterSource source = new WaterSource();
private int i;
private float f;
@Override
public String toString() {
return
"valve1 = " + valve1 + " " +
"valve2 = " + valve2 + " " +
"valve3 = " + valve3 + " " +
"valve4 = " + valve4 + "\n" +
"i = " + i + " " + "f = " + f + " " +
"source = " + source; // [1]
}
public static void main(String[] args) {
SprinklerSystem sprinklers = new SprinklerSystem();
System.out.println(sprinklers);
}
}
/* Output:
WaterSource()
valve1 = null valve2 = null valve3 = null valve4 = null
i = 0 f = 0.0 source = Constructed
*/
用向上转型来代替继承
22.当方法操纵的是一个类而非接口时,它就只能作用于那个类或其子类。如果想把方法应用于那个继承层级结构之外的类,就会触霉头。接口在很大程度上放宽了这个限制,因而使用接口可以编写复用性更好的代码
23.迭代器
使用 iterator() 方法要求集合返回一个 Iterator。 Iterator 将准备好返回序列中的第一个元素。
使用 next() 方法获得序列中的下一个元素。
使用 hasNext() 方法检查序列中是否还有元素。
使用 remove() 方法将迭代器最近返回的那个元素删除。

被折叠的 条评论
为什么被折叠?



