Java高级篇 -- List选择及优化
为什么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选择及优化相关推荐
- Java高级篇-0-为什么要掌握Java高级篇知识
好长时间了,就想要花时间系统去学习下Java的高级篇知识,这部分是我个人目前比较欠缺的,而且是急缺的知识.我认为的Java高级篇内容是这样划分的:对Java这个编程语言有基本了解,基本掌握了基础语法, ...
- Java高级篇——深入浅出Java类加载机制
转载自 Java高级篇--深入浅出Java类加载机制 类加载器 简单讲,类加载器ClassLoader的功能就是负责将class文件加载到jvm内存. 类加载器分类 从虚拟机层面讲分为两大类型的类加载 ...
- elasticsearch - java - 高级篇 - 封装类 - 2
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. -侯氏工坊 文章目录 说明 参考 核心封装类 新增类 说明 高级篇是自我封装的一个进化过程 封装类并不是固定不变 ...
- 2022金三银四面试总结-Java高级篇
Java面试总结 1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类.它包含有各种有关集合操作的静 ...
- 面试题之JAVA高级篇
JVM 只需一张图 MQ相关问题 如何保证消息的可靠性传输/如何处理消息丢失问题? 考虑维度 分析 生产者 原因:网络中断 解决1:可以使用rabbitmq提供的事务功能 就是生产者发送数据之前开 ...
- 【鲁班学院】面试总结:Java高级篇(上):集合的类型以及重新认识HashMap
1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类.它包含有各种有关集合操作的静态多态方法. ja ...
- 第三篇 Java 高级篇
1.JVM内存分哪几个区,每个区的作用是什么? java虚拟机主要分为以下几个区: (1)方法区: 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法 ...
- Java高级篇(二)——网络通信
网络编程是每个开发人员工具箱中的核心部分,我们在学习了诸多Java的知识后,也将步入几个大的方向,Java网络编程就是其中之一. 如今强调网络的程序不比涉及网络的更多.除了经典的应用程序,如电子邮件. ...
- Java+高级篇+单核CPU vs 多核CPU
单核CPU:其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务 一个Java应用程序java.exe,其实至少有三个线程 * main()主线程 * gc()垃圾回收线程 * 异常处 ...
最新文章
- 我的这10年——从机械绘图 到 炼油 到 微软MVP 的华丽转身
- zz 标 题: 求weka JVM outofMemory问题的解决方案【已解决】
- JAX-RS 2.0:服务器端处理管道
- vSphere HA 原理与配置
- rabbitmq direct 多个消费者_RabbitMQ实战应用技巧
- Hadoop记录-hadoop2.x常用端口及定义方法
- Java配置环境变量、方法和原因
- 两年经验拿到蚂蚁/头条 Offer(面经分享)
- 机器学习笔记(二):矩阵、环境搭建、NumPy | 凌云时刻
- 平均无故障时间100万小时_无故障运行时间MTBF投标要求GB5080.7-中检
- 【hadoop权威指南第四版】第四章hadoop的IO【笔记+代码】
- Mac卸载creative cloud
- 2018区块链技术及应用峰会(BTA)·中国全日程发布,大会倒计时5天
- Cocos2d-x 3.4 初体验——安装教程
- Git:gnutls_handshake() failed: A TLS packet with unexpected length was received
- Win10去除资源管理器导航窗格多余的文件夹(3D对象、桌面、图片等)
- 搜索框的代码css,css搜索框_精美css搜索框代码
- 解决chm文档字体太小的问题
- eclipse打不开的常见错误
- 家暴屡教不改能判刑吗