由于工作太忙,已经很久没写下什么东西了,记录比记忆重要,把一些小知识记下来,顺便与大家交流和分享下(持续更新)。
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
分享到:
相关推荐
【标题】IT、Web、sH日常知识积累笔记 这些笔记涵盖了广泛的IT、Web和sH(可能是Shell脚本)领域的基础知识,旨在帮助读者构建扎实的技术基础。在IT行业中,不断学习和积累新知识是至关重要的,特别是对于Web开发和...
在IT领域,不断的学习和知识积累是至关重要的。"学习知识积累"这个标题暗示了这是一个包含各种IT基础知识的资源集合,旨在帮助用户提升其技术理解并拓展...记住,IT行业的知识更新迅速,持续学习是保持竞争力的关键。
3. 知识积累的意义:提升个人就业力,为职业生涯的可持续发展打下坚实基础,同时也是适应社会变革和个人成长的关键。 通过本讲的学习,学生需要拓展阅读,进行生涯人物访谈,完成能力测试,并结合自身职业目标分析...
正方主张知识积累是社会发展的基础,反方则强调知识创新是推动社会进步的关键。 正方一辩认为,知识积累是人类历史发展的基石,是知识量与价值增长的源泉。知识积累具有乘数效应和可化性,可以将已有的知识转化为...
标题中的"工作后JAVA的知识积累"指的是在实际工作中不断学习和提升Java技能的过程。这可能包括对Java基础的深入理解,如类、对象、接口、继承、多态等概念,以及更高级的主题,如并发编程、垃圾回收机制、JVM优化等...
标题中的“我这几年的学习积累,方便的小工具.net”暗示了这是一个关于.NET框架的学习资源集合,包含了许多实用的小工具和编程技巧。描述中的“保证物超所值”则强调了这个压缩包内容的丰富性和价值。标签进一步明确...
- **内部知识管理信息系统**:通过建立内部信息群和公用盘服务器,鼓励员工交流和知识积累。 - **内部知识的积累与交流**:分为公司信息、专业技术知识和项目积累三类,由相应部门负责收集、整理和发布。 - **...
本文《基于获取持续竞争优势的科技成果转化知识学习模式》深入探讨了如何通过有效的知识学习模式,促进科技成果转化,从而获取竞争优势。 首先,知识学习是一个动态的积累和提升过程,它对科技成果转化具有明显的...
以下是一些产品经理持续积累和提升能力的常用小技巧: 1. **短期规划,小步快跑**:面对互联网行业的快速迭代,产品经理应设定短期目标,如以周为单位,专注于一个特定领域的学习或实现一个小功能。例如,如果涉及...
因此,持续的知识更新和保护机制至关重要。这包括定期审查和更新知识库,以及采取措施保护知识产权,防止知识泄露。 ### 三、案例分析:IBM的知识管理实践 IBM作为全球领先的信息技术和服务提供商,其知识管理实践...
小知识的积累则是持续学习的过程。IT行业更新迅速,新技术、新框架不断涌现,因此保持对最新知识的关注和学习是至关重要的。定期阅读行业动态,了解新的编程语言、工具或最佳实践,能够帮助专业人士保持竞争力。 总...
企业知识管理是现代企业管理的核心部分,它涉及到企业的内部知识积累、外部知识内化以及知识的分享与创新。在《企业知识管理的客体-知识》的PPT中,重点介绍了如何管理和利用这些知识资源。 首先,企业内部知识的...
《语文基础知识积累——关于孔子的名言名句》是一份重要的语文学习资料,它汇集了中国古代伟大的教育家、思想家孔子的诸多智慧言语。这些名言不仅蕴含着丰富的哲学思想,也是中华优秀传统文化的重要组成部分,对于...
- 建立知识积累流程,确保新知识的及时录入和更新。 - 通过统计分析,定期评估知识资产的价值和完整性,以便调整策略。 - 实施绩效评估,激励员工积极参与知识管理。 通过这样的系统规划和实施,安邦保险集团...
最后,有效的知识转移机制还能帮助组织保留和积累关键知识,避免因人员流动造成的知识流失。 ### 知识转移的分类与模型 知识转移可以分为内部转移和外部转移两种类型。内部转移通常发生在组织内部,如高级工程师向...
知识营运是知识管理领域的重要概念,特别是在当前信息化社会中,知识的快速积累与更新对企业竞争力的影响日益显著。知识营运强调的是将知识管理转化为一种可持续的、具有商业价值的运营模式,旨在通过有效的知识创造...
- 文档是知识的重要载体,企业应建立系统化的文档管理制度,确保知识的积累、更新和存取。定期审查和更新文档,保持其时效性和准确性,有助于维持知识库的活力。 4. **知识型项目管理机制**: - 知识型项目的管理...
1. 人(People):人是知识的载体,他们通过个人经验和社交互动积累知识。 2. 知识(Knowledge):包括显性知识(如文档、信息)和隐性知识(如技能、经验)。 3. 分享(Share):鼓励员工分享知识,促进学习和创新...