java中有哪些代码效率优化点,比如while,for怎么写效率更高

卜溪大人 2019-01-09 03:50:55
java中有哪些代码效率优化点,比如while,for怎么写效率更高
...全文
1395 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlackR 2019-01-13
  • 打赏
  • 举报
回复
引用 5 楼 weixin_39434872的回复:
lambda表达式,StreamAPI
stream数据量小的情况下没有原生的快,而且会慢很多
  • 打赏
  • 举报
回复
满足break的时候尽量用break
threenewbee 2019-01-12
  • 打赏
  • 举报
回复
从cpu缓存的角度还是可以注意下的 https://www.cnblogs.com/lyhero11/p/5120847.html
  • 打赏
  • 举报
回复
for用原生的for循环,比增强for会好点,where循环这个看你条件怎么设置,尽量简单。
wjsjason 2019-01-12
  • 打赏
  • 举报
回复
我觉得java代码本身效率就不高,优化java代码性能提升的空间不一定很好,而java与c混合编程,重要的耗时算法用c实现,性能提高更好吧。个人观点啊
dadiyang 2019-01-12
  • 打赏
  • 举报
回复
循环遍历List的时候使用迭代器或for(item : list),不要用fori,然后list.get(i)。
  • 打赏
  • 举报
回复
不错不错,可以啊小伙子
HelloKittyn 2019-01-11
  • 打赏
  • 举报
回复
能用foreach就用foreach,循环中少创建对象,zi符串拼接改为stringbuilder,符合条件尽快break,具体业务具体分析,
码匠笔记 2019-01-11
  • 打赏
  • 举报
回复
这个问题很大,不能一概而论。仅仅是对于循环并不能说明根本问题。 举一个简单的例子, 如果是两层for循环,最好是内层循环构建HashMap,外层循环直接获取。如下 public class Test { public static void main(String[] args) { fun1(); fun2(); } private static void fun2() { int count = 0; List list1 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List list2 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for (Object o : list1) { for (Object o1 : list2) { count++; if (o == o1) { System.out.print(o + " "); } } } System.out.println("迭代次数:" + count); } private static void fun1() { int count = 0; List list1 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List list2 = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Map<Integer, Integer> map = new HashMap<>(); for (Object o1 : list2) { count++; map.put((int)o1, (int)o1); } for (Object o : list1) { count++; if (map.get(o) == o) { System.out.print(o + " "); } } System.out.println("迭代次数:" + count); } } 输出结果 1 2 3 4 5 6 7 8 9 10 迭代次数:20 1 2 3 4 5 6 7 8 9 10 迭代次数:100 所以仅仅是10个元素的循环就能差出来5倍,那么更多的数据呢?所以性能需要从每一个地方考虑,需要对时间复杂度等优化。 推荐看一下《Java性能权威指南》 小编为订阅号「码匠笔记」号主,先后就职于 ThoughtWorks、阿里巴巴等互联网公司的经验分享,包含但不限于 JAVA、并发编程、性能优化、架构设计、小程序、开源软件等。有兴趣可以关注一波,一起学习、讨论。
qq_18832425 2019-01-11
  • 打赏
  • 举报
回复
语言无关,相提高还是把基础学好
吟恋错 2019-01-11
  • 打赏
  • 举报
回复
引用 4 楼 有梦想的小白 的回复:
for(int i=0,j=999; i < 999; i++) { } 可以通过在循环初始化的时候把循环次数赋值给一个变量,而不是每次循环都要重新读取一次,这样可以提高一点点效率。最终要的是在循环过程中如果在循环未结束之前已经做完了业务逻辑需要处理的内容,这个时候可以用break彻底退出循环,或者根据业务需求用continue开始下一次循环的判断。
这个回答足可满意
stacksoverflow 2019-01-11
  • 打赏
  • 举报
回复
和语言无关,想提高效率的话了解一下数据结构和算法吧。
Caesar Liu 2019-01-11
  • 打赏
  • 举报
回复
你压根就不会对一个很大的集合去循环,如果慢,肯定是循环体中的代码执行效率低,循环体最前就要先判断是否能够continue或者break
白灼红萝卜i 2019-01-11
  • 打赏
  • 举报
回复
可以使用java8中的lambda表达式
list.stream.foreach(it->it)
对于耗时的操作用lambda表达式的for循环,如数据库的IO操作,多线程充分利用CPU资源;对于不太耗时的操作使用普通for循环,比如纯CPU计算类型的操作,单线程性能更高,减少上下文切换的开销。
Chowhounds 2019-01-11
  • 打赏
  • 举报
回复
for(int i = 0; i < a.length(这里最好是固定的 不用每次请求);i++)
yelin1 2019-01-11
  • 打赏
  • 举报
回复
使用foreach
  • 打赏
  • 举报
回复
较真的话,用 jdk8 stream
nayi_224 2019-01-10
  • 打赏
  • 举报
回复
for、while循环写法上会造成一定的效率差异,但是实际上,在99.9%的情况下可以忽略。关键是是否使用了合适的数据结构,以及代码本身的逻辑。
`ZWY` 2019-01-10
  • 打赏
  • 举报
回复
lambda表达式,StreamAPI
鸣鸣Amadues 2019-01-10
  • 打赏
  • 举报
回复
语法本身没有什么效率差异,主要还是看你业务逻辑的代码能优化多好,比如能早点跳出循环的话就早点跳出循环,尽量减少代码执行的次数,避免循环里访问数据库等等。
加载更多回复(5)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧