为什么80%的码农都做不了架构师?>>>   

在java编程中,我们常常使用到java自带的集合类List

以下为几点简单的优化建议:

1.Vector还是ArrayList

Vector有其特有有点,其每个方法都为同步方法【synchronized】,所以是线程安全的,在多线程环境下,若多个进程同时访问受保护资源,用Vector就显得十分简洁,安全。

ArrayList为非线程安全的,若不是多线程环境,或多线程环境下资源不需要写、更新,只需要读取,使用,或资源不需要受保护,使用ArrayList就大大提高了效率。

线程安全的散列表将本来可以并行处理的任务进行排队,串行处理。

同样:Hashtable是线程安全的,HashMap是非线程安全的

2.设置ArrayList初始化容量

ArrayList不断增长过程中会自动扩增其空间,这无疑耗费一定的资源,时间。

如果已经预料到ArrayList将是一个很大的数组,并且你预料到它将变得异常庞大,可预先设置数组的大小,可以提高添加新元素的速度,并优化性能。

原来ArrayList list=new ArrayList();

现在ArrayList list=new ArrayList();

list.ensureCapacity(N);

3.ArrayList与LinkedList

二者功能相当,但内部实现的数据结构不同

ArrayList通过object[]实现,LinkedList通过链表。

由此易得:

ArrayList:随机访问,顺序添加效率均高于LinkedList,只要用于变动较小的集合存储

对其添加、删除某位置元素,将移动所有后方元素,效率太低

LinkedList:在某个位置增删效率较高,用于变动较为频繁的集合存储

4.遍历

若List不发生大小变动【循环中无remove,add操作】,即不用每次检测其大小

原来:

for (int i = 0; i < vector.size (); i++)

改为:

for (int i = 0,n=list.size (); i < n; i++)

不用每次循环都检测其大小,效率将大大提高

5.使用

除非十分必要,否则尽量使用java提供的集合,不要自己书写功能类似的方法

转载于:https://my.oschina.net/julycn/blog/331742

Java高级篇 -- List选择及优化相关推荐

  1. Java高级篇-0-为什么要掌握Java高级篇知识

    好长时间了,就想要花时间系统去学习下Java的高级篇知识,这部分是我个人目前比较欠缺的,而且是急缺的知识.我认为的Java高级篇内容是这样划分的:对Java这个编程语言有基本了解,基本掌握了基础语法, ...

  2. Java高级篇——深入浅出Java类加载机制

    转载自 Java高级篇--深入浅出Java类加载机制 类加载器 简单讲,类加载器ClassLoader的功能就是负责将class文件加载到jvm内存. 类加载器分类 从虚拟机层面讲分为两大类型的类加载 ...

  3. elasticsearch - java - 高级篇 - 封装类 - 2

    世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. -侯氏工坊 文章目录 说明 参考 核心封装类 新增类 说明 高级篇是自我封装的一个进化过程 封装类并不是固定不变 ...

  4. 2022金三银四面试总结-Java高级篇

    Java面试总结 1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类.它包含有各种有关集合操作的静 ...

  5. 面试题之JAVA高级篇

    JVM 只需一张图 MQ相关问题 如何保证消息的可靠性传输/如何处理消息丢失问题? 考虑维度 分析 生产者 原因:网络中断 解决1:可以使用rabbitmq提供的事务功能   就是生产者发送数据之前开 ...

  6. 【鲁班学院】面试总结:Java高级篇(上):集合的类型以及重新认识HashMap

    1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类.它包含有各种有关集合操作的静态多态方法. ja ...

  7. 第三篇 Java 高级篇

    1.JVM内存分哪几个区,每个区的作用是什么?  java虚拟机主要分为以下几个区: (1)方法区: 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法 ...

  8. Java高级篇(二)——网络通信

    网络编程是每个开发人员工具箱中的核心部分,我们在学习了诸多Java的知识后,也将步入几个大的方向,Java网络编程就是其中之一. 如今强调网络的程序不比涉及网络的更多.除了经典的应用程序,如电子邮件. ...

  9. Java+高级篇+单核CPU vs 多核CPU

    单核CPU:其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务 一个Java应用程序java.exe,其实至少有三个线程 * main()主线程 * gc()垃圾回收线程 * 异常处 ...

最新文章

  1. 我的这10年——从机械绘图 到 炼油 到 微软MVP 的华丽转身
  2. zz 标 题: 求weka JVM outofMemory问题的解决方案【已解决】
  3. JAX-RS 2.0:服务器端处理管道
  4. vSphere HA 原理与配置
  5. rabbitmq direct 多个消费者_RabbitMQ实战应用技巧
  6. Hadoop记录-hadoop2.x常用端口及定义方法
  7. Java配置环境变量、方法和原因
  8. 两年经验拿到蚂蚁/头条 Offer(面经分享)
  9. 机器学习笔记(二):矩阵、环境搭建、NumPy | 凌云时刻
  10. 平均无故障时间100万小时_无故障运行时间MTBF投标要求GB5080.7-中检
  11. 【hadoop权威指南第四版】第四章hadoop的IO【笔记+代码】
  12. Mac卸载creative cloud
  13. 2018区块链技术及应用峰会(BTA)·中国全日程发布,大会倒计时5天
  14. Cocos2d-x 3.4 初体验——安装教程
  15. Git:gnutls_handshake() failed: A TLS packet with unexpected length was received
  16. Win10去除资源管理器导航窗格多余的文件夹(3D对象、桌面、图片等)
  17. 搜索框的代码css,css搜索框_精美css搜索框代码
  18. 解决chm文档字体太小的问题
  19. eclipse打不开的常见错误
  20. 家暴屡教不改能判刑吗

热门文章

  1. 《少年先疯队》第九次团队作业:Beta冲刺与团队项目验收
  2. 函数-函数进阶-装饰器流程分析
  3. LDAP第三天 MySQL+LDAP 安装
  4. 序列元素IT面试题——判断合法出栈序列
  5. 开启chrome默认支持ipv6
  6. JQuery 文本框高亮显示插件
  7. .net Web网站转换成Web应用程序 备忘
  8. CSS clip:rect矩形剪裁功能
  9. 上架相关——appstore 更新app版本
  10. MFC的程序,不想显示窗口,任务栏里也不显示