String s = "Hello";
int i = v.indexOf(s);
if(I != -1) v.remove(s);
这些代码看起来没什么错误,但它同样对性能不利 。在这段代码中,indexOf()方法对v进行顺序搜索寻找字符串“Hello”,remove(s)方法也要进行同样的顺序搜索 。改进之后的版本是:
String s = "Hello";
int i = v.indexOf(s);
if(I != -1) v.remove(i);
这个版本中我们直接在remove()方法中给出待删除元素的精确索引位置,从而避免了第二次搜索 。一个更好的版本是:
String s = "Hello"; v.remove(s);
最后,我们再来看一个有关Vector类的代码片段:
for(int I=0; I++;Iv.length)
如果v包含100,000个元素,这个代码片段将调用v.size()方法100,000次 。虽然size方法是一个简单的方法,但它仍旧需要一次方法调用的开销,至少JVM需要为它配置以及清除堆栈环境 。在这里,for循环内部的代码不会以任何方式修改Vector类型对象v的大?。?因此上面的代码最好改写成下面这种形式:
int size = v.size(); for(int I=0; I++;Isize)
虽然这是一个简单的改动 , 但它仍旧赢得了性能 。毕竟,每一个CPU周期都是宝贵的 。
15、当复制大量数据时,使用System.arraycopy()命令 。
16、代码重构:增强代码的可读性 。
例如:
public class ShopCart {
private List carts ;
…
public void add (Object item) {
if(carts == null) {
carts = new ArrayList();
}
crts.add(item);
}
public void remove(Object item) {
if(carts. contains(item)) {
carts.remove(item);
}
}
public List getCarts() {
//返回只读列表
return Collections.unmodifiableList(carts);
}
//不推荐这种方式
//this.getCarts().add(item);
}
17、不用new关键词创建类的实例
用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用 。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法 。clone()方法不会调用任何类构造函数 。
在使用设计模式(Design Pattern)的场合 , 如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单 。例如 , 下面是Factory模式的一个典型实现:
public static Credit getNewCredit() {
return new Credit();
}
改进后的代码使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路对于数组处理同样很有用 。
18、乘法和除法
考虑下面的代码:
for (val = 0; val100000; val +=5) {
alterX = val * 8; myResult = val * 2;
}
用移位操作替代乘法操作可以极大地提高性能 。下面是修改后的代码:
for (val = 0; val100000; val += 5) {
alterX = val3; myResult = val1;
}
修改后的代码不再做乘以8的操作 , 而是改用等价的左移3位操作 , 每左移1位相当于乘以2 。相应地 , 右移1位操作相当于除以2 。值得一提的是,虽然移位操作速度快 , 但可能使代码比较难于理解,所以最好加上一些注释 。
19、在JSP页面中关闭无用的会话 。
一个常见的误解是以为session在有客户端访问时就被创建 , 然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 %@pagesession="false"% 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession
session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历 。由于session会消耗内存资源,因此 , 如果不打算使用session,应该在所有的JSP中关闭它 。
推荐阅读
- python程序一般需要多少行,python运行要求
- asp.net现在的时间,aspnet
- python爬虫模拟点击下一页链接,python爬虫 点击下一页
- 小程序搭建厦门医院网站,厦门网上医院预约平台
- php语句创建数据库新表 phpstudy创建数据库
- chatgpt太多请求,ChatGpt此请求无效
- 超极本电脑怎么连接显卡,超极本怎么连接wifi
- 求生游戏角色扮演系统小说,求生游戏角色扮演系统小说免费阅读
- vb.net锁定内存 vb锁定,运行时用户不可编辑