由于工作太忙,已经很久没写下什么东西了,记录比记忆重要,把一些小知识记下来,顺便与大家交流和分享下(持续更新)。
1)List的复制
//方法(a)
public <T extends Object> List<T> copyArrayList(List<T> list){
List<T> copyList = new ArrayList<T>();
for(T t:list){
copyList.add(t);
}
return copyList;
}
这样直观而低效,可以用以下两种方式代替[/b]
//方法(b)
public <T extends Object> List<T> copyArrayList(List<T> list){
new ArrayList<T>(list);
if(list instanceof ArrayList){
return (List<T>) ((ArrayList<T>)list).clone();
}else{
List<T> copyList = new ArrayList<T>();
for(T t:list){
copyList.add(t);
}
return copyList;
}
}
//ArrayList的clone()方法底层是调用System.copyArray的方法去拷贝数组,比自己拷贝要快得快
//方法(c)
public <T extends Object> List<T> copyArrayList(List<T> list){
return new ArrayList<T>(list);
}
//简单又方便
//据测试比(b)方法还要快上许多
总结:具体情况还要根据数量量而定,数据量越大,(a)方法越慢,因为要频繁地进行add操作。创建List的时候能指定容量最好,调用add()方法超过容量就要拷贝底层的数组。
PS:平时我们拷贝数组尽量用System.copyArray的方法,速度快
2)List的remove
无论是ArrayList还是LinkedList,remove(int index)效率都会比remove(Object obj)高。
对于ArrayList来说,remove(int index)能马上定位到数组上的某个元素,然后把它删掉,而remove(Object obj)则比较惨烈,需要从数组顺序遍历一次,对每个元素调用equals方法找出remove(Object obj)与参数中Object相等的对象,再把他删掉,这个元素如果在数组的越尾端则效率越低。
对于LinkedList来说,remove(Object obj)也是类似地从链表的头开始遍历,对每个元素调用equals方法找出remove(Object obj)与参数中Object相等的对象,再把他删掉,因此效率也是最低的。而remove(int index)不像ArrayList一样马上定位到某个位置,需要从链表查找到该index的元素进行删除。这个步骤与LindedList的get(int index)方法是一样的。做了优化的地方是,如果index比size大则从链表的末尾开始遍历,比size小则从头开始遍历。但依然不是最高效。removeFirst()与removeLast可以马上定位(jdk1.6的poll与pop,pollLast同理),在可以的情况下尽量调用这2方法删除LinkedList中的元素。
一般情况而言,LindedList的删除会比ArrayList效率高,建立在删除ArrayList元素需要进行拷贝数组的情况下。但这也不是绝对的,以下这种情况ArrayList则比LinkedList效率更高
for(int i=list.size();--i>=0;){
Object obj = list.remove(i);
//TODO...by obj
}
3)参数final
不少人说在 JAVA 中用 final 来修饰方法参数是为了防止方法参数在调用时被修改,但其实更重要的更少人知晓的原因是:当你的方法体内没有持有参数的引用时,理论上是有被释放掉的可能。使用了final修饰参数,即使外部没有任何指针指向这个引用,这个参数都不会在方法体跑完之前GC掉。
4)找出字符串中第一个不重复的字符
public static Character firstNoRepeated(String str) {
int[] aa = new int[255];
for (int i = 0; i < str.length(); i++) {
aa[str.charAt(i)]++;
}
for (int i = 0; i < aa.length; i++) {
if (aa[i] == 1) {
return (char) i;
}
}
return null;
}
public static Character firstNoRepeated2(String str){
int length = str.length();
for(int i=0;i<length;i++){
char c = str.charAt(i);
if(str.indexOf(c) == str.lastIndexOf(c)){
return c;
}
}
return null;
}
总结:都是不错能实现的想法,效率谁快一看便知
5)
-XX:-OmitStackTraceInFastThrow
分享到:
相关推荐
:fire: 持续更新中,涉及Android开发者基础、进阶、高阶、各辐射领域等方向的知识体系与面试题总结归纳,目前项目处于初期阶段,内容较少,但是小编会用心收集并规整,旨在方便自己,同时方便他人,如果你也有兴趣,...
基于获取持续竞争优势的科技成果转化知识学习模式,李玥,刘希宋,知识学习是知识的积累和提升过程,对科技成果转化的驱动力和支配性愈加明显。本文指出获取持续竞争优势是科技成果转化知识学习的
试论知识积累与传播在可持续发展中的地位和作用 (1997年)
与批量学习不同的是,在批量学习中所有的训练数据都是一次性可用的,而持续学习代表了一组方法,这些方法可以积累知识,并使用序列可用的数据连续学习。与人类的学习过程一样,不断学习具有学习、融合和积累不同时间...
微注:在继续学习&探索&积累,并率先于持续更新。 综合类 综合类 地址 大前端综合教程,资源汇总 2018年成为Web开发人员的路线图 前端知识结构 Web前端开发大系概览 免费的编程中文书籍索引 前置书籍 前置免费...
从 IT 到 DT 的本质变化是“围绕数据资产进行价值的持续积累和释放”, 数据中台是当前数据分析能力提升的技术热点。为了解国内外数据中台领域目前的研究进展、热点、阶段性研究前沿及发展趋势,针对近五年国内外...
解决客户多年积累的大量数据、信息与知识因信息孤立长期被埋没不能有效利用的困扰。解决企业信息孤岛难题。实现与客户具体业务场景相结合,对角色建立多维画像并持续迭代,实现知识的主动推送。
通过10000小时的持续积累变成自己的智慧。 大多数的所谓的个人知识管理软件,实际上还停留在第一阶段, 而针式PKM,则更注重文档的归类、统计分析、辅助学习等, 避免浪费了很多时间收集的资料,实际上只是活在...
公众号文本分类.md-相应文件在同一个目录机器翻译多模态 -待更新火炬机器学习搜寻总结-看到---持续更新推荐系统----这个作者写的非常好公众号技术问题答疑汇总模型部署 1,卡夫卡 2,Docker 3,弹性搜索 4,烧瓶+ ...
通过10000小时的持续积累变成自己的智慧。 大多数的所谓的个人知识管理软件,实际上还停留在第一阶段, 而针式PKM,则更注重文档的归类、统计分析、辅助学习等, 避免浪费了很多时间收集的资料,实际上只是活在...
通过10000小时的持续积累变成自己的智慧。 大多数的所谓的个人知识管理软件,实际上还停留在第一阶段, 而针式PKM,则更注重文档的归类、统计分析、辅助学习等, 避免浪费了很多时间收集的资料,实际上只是活在...
PLM能够帮助企业实现知识的不断积累和技术的持续创新。从而支持企业实现以客户为驱动的、持续的、突破性的、杀手铜式的创新。本文将在传统版本管理的研究基础上,面向企业知识管理和PLM环境对版本管理进行进一步研究...
由于之前亦没有相关知识的积累,因此也是对如何实现也是一头雾水。于是只能找度娘,关键字"自动化发布"。搜索到很多工具和方法,但都是以Java平台居多,.net平台相关资料不多。其中以Jenkins介绍较多,微软也提供...
本文提出内生增长模型是通过知识积累了解经济长期增长的关键。 知识和研究与开发(R&D)的私人和公共投资对增长具有长期影响。 由于经济增长率的微小变化会累积一代或更多代人的生活水平发生重大变化,因此政府...
为了解决水资源规划庞杂的知识及其整合问题,构建了以工作流为主线的水资源知识管理框架。该框架考虑到水资源综合...该管理框架可以有效地实现水资源规划的知识管理以及稳定而可持续的知识积累,为数字流域模型作准备。
,包括Java基础及深入知识点,Android技术博客,Python,Go学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!...
而这个仓库,是本人平日学习,积累,或者疑惑之后突然找到答案,或者总结对比,积攒的知识点,只要还在技术行业,就会一直更新。说不上是面试知识总结,更说不上是教别人什么,最重要的是知我所知,知我所不知。 种...
金三银四,为了面试也还在慢慢积累知识,Github上面可以直接查看所有面试题整理,github传送门,觉得不错,点个Star★,持续更新中。另外,也可以关注微信公众号:小狮子前端Vue,源码以及资料今后都会放在里面。 ...