集合类-继承关系图

一.ArrayList 2 LinkedList性能分析

package com.java.essence_36;import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;
import java.util.*;/*** Created by lw on 14-5-20.* * 运行内存-Xms512m -Xmx512m -XX:+PrintGCDetails*/
public class ArrayList2LinkedList_Compare {private static final int INIT_SIZE = 500000;private static final int ADDRANDOM_SIZE = 10000;public static LinkedList<Object> linkedList = new LinkedList();public static ArrayList<Object> arrayList = new ArrayList(INIT_SIZE);private static Object object = new Object();private static Random random = new Random();public void add2Last(String state, List list) {for (int i = 0; i < INIT_SIZE; i++) {list.add(object);}}public void add2Random(String state, List list) {int temp = 0;for (int i = 0; i < ADDRANDOM_SIZE; i++) {temp = random.nextInt(INIT_SIZE);list.add(temp, object);}}public void remove2Random(String state, List list) {int temp = 0;for (int i = 0; i < ADDRANDOM_SIZE; i++) {temp = random.nextInt(INIT_SIZE);list.remove(temp);}}public void forEach2(String state, List list) {for (Object o : list) {object = o;}}public void iterator2(String state, List list) {Iterator iterator = list.iterator();while (iterator.hasNext()) {object = iterator.next();}}public void for2(String state, List list) {for (int i = 0; i < INIT_SIZE; i++) {object = list.get(i);}}public static void main(String[] args) {Proxy_Cglib proxy_cglib = new Proxy_Cglib();ArrayList2LinkedList_Compare compare =(ArrayList2LinkedList_Compare) proxy_cglib.getInstance(new ArrayList2LinkedList_Compare());compare.add2Last("ArrayList  末尾添加数据[50w次]测试:", arrayList);compare.add2Last("LinkedList 末尾添加数据[50w次]测试:", linkedList);System.out.println();compare.add2Random("ArrayList  随机位置添加数据[1w次]测试:", arrayList);compare.add2Random("LinkedList 随机位置添加数据[1w次]测试:", linkedList);System.out.println();compare.remove2Random("ArrayList  随机位置删除次数[1w次]测试:", arrayList);compare.remove2Random("LinkedList 随机位置删除次数[1w次]测试:", linkedList);System.out.println();compare.forEach2("ArrayList  forEach2循环读取测试:", arrayList);compare.forEach2("LinkedList forEach2循环读取测试:", linkedList);System.out.println();compare.iterator2("ArrayList  iterator2循环读取测试:", arrayList);compare.iterator2("LinkedList iterator2循环读取测试:", linkedList);System.out.println();compare.for2("ArrayList  for循环读取测试:", arrayList);compare.for2("LinkedList for循环读取测试:", linkedList);}
}/*** Created by lw on 14-5-1.* <p/>* cglib动态代理* 项目中计时方法执行计时使用*/
class Proxy_Cglib implements MethodInterceptor {private Object object;/*** 创建代理对象** @param object* @return*/public Object getInstance(Object object) {this.object = object;Enhancer enhancer = new Enhancer();enhancer.setSuperclass(this.object.getClass());// 回调方法enhancer.setCallback(this);// 创建代理对象return enhancer.create();}@Override// 回调方法public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable {long start = System.currentTimeMillis();proxy.invokeSuper(obj, args);System.out.println(args[0] + "执行耗时:" + (System.currentTimeMillis() - start) + "ms");return null;}
}

执行结果分析

 * 运行内存-Xms512m -Xmx512m -XX:+PrintGCDetails* 测试的结果与实际两者的区别不符,ArrayList居然任何地方表现优秀* !!!待追究原因...* * ------------------------------------------------* ArrayList  末尾添加数据[50w次]测试:执行耗时:8ms* LinkedList 末尾添加数据[50w次]测试:执行耗时:15ms* Q:* ArrayList如果没有指定大小会动态扩展,涉及到数组的复制* ------------------------------------------------* * ------------------------------------------------* ArrayList  随机位置添加数据[1w次]测试:执行耗时:516ms* LinkedList 随机位置添加数据[1w次]测试:执行耗时:3104ms* Q:* ArrayList每次随机插入时候进行一次数组的复制* 表现应该没有LinkedList优秀* ------------------------------------------------* *  ------------------------------------------------* ArrayList  随机位置删除次数[1w次]测试:执行耗时:508ms* LinkedList 随机位置删除次数[1w次]测试:执行耗时:3621ms* Q:* ArrayList 每次删除一个元素时候将进行数组的复制,引用下标-1*  因此越靠前开销越大* LinkedList删除时候判断位置是{前半段、中间、后半段}去删除* ArrayList应该没有LinkedList优秀*  ------------------------------------------------* *  ------------------------------------------------* ArrayList  forEach2循环读取测试:执行耗时:10ms* LinkedList forEach2循环读取测试:执行耗时:23ms* * ArrayList  iterator2循环读取测试:执行耗时:9ms* LinkedList iterator2循环读取测试:执行耗时:29ms* * ArrayList  for循环读取测试:执行耗时:6ms* LinkedList for循环读取测试: 无穷大...* Q:*  随机访问ArrayList优秀*  ------------------------------------------------

二.有序的HashMap -LinkedHashMap

package com.java.essence_36;import java.util.*;/*** Created by lw on 14-5-20.* <p/>* 有序的HashMap -LinkedHashMap*/
public class Linked_HashMap {private static Map<Integer, String> integerStringMap;/*** accessOrder=true  按照元素最后访问时间排序* accessOrder=false 按照元素添加顺序排序* public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder) {* ..* }*/private static void InitLinked_HashMap(boolean accessOrder) {integerStringMap = new LinkedHashMap(16, 0.75f, accessOrder);integerStringMap.put(1, "a");integerStringMap.put(2, "b");integerStringMap.put(3, "c");integerStringMap.put(4, "d");System.out.println("访问key=2、3的元素....");integerStringMap.get(2);integerStringMap.get(3);System.out.println(integerStringMap);}/*** accessOrder=true  按照元素最后访问时间排序* 遍历时候由Key获取Value时候抛出java.util.ConcurrentModificationException* <p/>* 遍历时候,LinkedHashMap调用get方法会修改LinkedHashMap结构。* remove亦是。* 参考下面is2ConcurrentModificationException()方法内容*/private static void for_Linked_HashMap() {integerStringMap = new LinkedHashMap(16, 0.75f, true);integerStringMap.put(1, "a");integerStringMap.put(2, "b");integerStringMap.put(3, "c");integerStringMap.put(4, "d");Set<Integer> set = integerStringMap.keySet();for (Integer integer : set) {integerStringMap.get(integer);// integerStringMap.remove(integer);}}public static void main(String[] args) {InitLinked_HashMap(true);InitLinked_HashMap(false);//for_Linked_HashMap();is2ConcurrentModificationException();}/*** 衍生:List怎么移除元素?*      forEach怎么执行的呢?* 什么时候产生快速失败?什么时候产生安全失败?*/private static void is2ConcurrentModificationException() {String str;List<String> list = new ArrayList<String>();list.add("a");list.add("b");for (String s : list) {//list.remove(s);}Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {str = iterator.next();//list.remove(str);}Map map = new HashMap();map.put(1, "a");map.put(2, "b");for (int i = 0; i < map.size(); i++) {//  map.remove(1);}Set<Integer> set = map.keySet();for (Integer integer : set) {//set.remove(integer);//yes//map.remove(integer);//yes}}
}

三.实现了排序的 TreeMap

package com.java.essence_36;import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;/*** Created by lw on 14-5-20.* 学生姓名与成绩*/
class Student implements Comparable<Student> {String name;int score;/*** 衍生疑问:* 为什么要有构造器?* 他做了什么?* 对象到底是谁创建的?构造器里面吗?* this到底什么?*/public Student(String name, int score) {this.name = name;this.score = score;}/*** 重写排序实现方法* 按成绩比较** @param o* @return*/@Overridepublic int compareTo(Student o) {if (o.score > this.score) {return -1;}if (o.score < this.score) {return 1;}return 0;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", score=" + score +'}';}
}//学生的详细信息
class Student_Message {String address;Student_Message(String address) {this.address = address;}@Overridepublic String toString() {return "address='" + address;}
}public class Tree_Map {//①:比较的对象实现了Comparable接口private static Map<Student, Student_Message> map = new TreeMap();//①:将Comparator 传入构造器private static Map<Student, Student_Message> map_1 = new TreeMap(new Comparator() {@Overridepublic int compare(Object o1, Object o2) {return 0;}@Overridepublic boolean equals(Object obj) {return false;}});/*** 衍生疑问:* 以上2种方法有什么区别。* 为什么Comparator还需要重写equals方法?*//*** 初始化treeMap*/private static void InitTreeMap() {Student yiwa = new Student("yiwa", 20);Student erwa = new Student("erwa", 30);Student sanwa = new Student("sanwa", 40);Student siwa = new Student("siwa", 80);Student wuwa = new Student("wuwa", 100);map.put(yiwa, new Student_Message("TY"));map.put(erwa, new Student_Message("TY"));map.put(sanwa, new Student_Message("TY"));map.put(siwa, new Student_Message("TY"));map.put(wuwa, new Student_Message("TY"));//查询一娃~~四娃成绩之间的学生System.out.println(((TreeMap) map).subMap(yiwa, siwa));System.out.println();//查询成绩大于一娃的学生System.out.println(((TreeMap) map).tailMap(yiwa));System.out.println();//查询成绩小于三娃的学生System.out.println(((TreeMap) map).headMap(sanwa));}public static void main(String[] args) {InitTreeMap();}
}

四 .HashSet、LinkedSet、TreeSet的不同

package com.java.essence_36;import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;/*** Created by lw on 14-5-20.*/
public class Set_ {private static Set<Integer> set;private static void initSet2Type(Set<Integer> set1, String state) {set = set1;set.add(3);set.add(5);set.add(130);set.add(13);set.add(33);System.out.println("\n\nSet->Type:" + state);for (Integer integer : set) {System.out.print(integer + "\t");}}public static void main(String[] args) {initSet2Type(new HashSet(), "new HashSet()");initSet2Type(new LinkedHashSet(), "new LinkedHashSet()");initSet2Type(new TreeSet(), "new TreeSet()");} }

打印输出

 /*  打印Set->Type:new HashSet()33 130 3   5   13Set->Type:new LinkedHashSet()3 5   130 13  33Set->Type:new TreeSet()3   5   13  33  130*/

透析Java本质-集合类的使用及性能分析相关推荐

  1. java本质_Java深入解析 透析Java本质的36个话题_源雷技术空间

    资源名称:Java深入解析  透析Java本质的36个话题 内容简介: 本书分为5 章,分别为"基本概念","运算符与表达式","String 类&q ...

  2. java由谁创建_透析Java本质-谁创建了对象,this是什么

    package com.java.essence_36; import java.util.ArrayList; import java.util.List; /** * Created by lw ...

  3. 《Java深入解析-透析Java本质的36个话题》笔记_第三章

    ## 第3 章 String 类103 ### 话题17 来龙去脉--"+"是怎样连接字符串的? 103 +连接字符串实际上是创建一个临时的StringBuilder对象,调用ap ...

  4. 经典算法研究系列:七、深入浅出遗传算法,透析GA本质【转载】

    本文由July 发表在他的博客中,原文参见http://blog.csdn.net/v_JULY_v/archive/2011/01/12/6132775.aspx,对遗传算法分析的很透彻,是学习算法 ...

  5. golang调用java的函数_大话golang性能分析(一):profile基本原理

    引言:好久没分享了,不多废话了,准备一个专题分三期来分享下golang的性能分析. O 专题目标 理解profile基本原理 熟悉go常用性能分析工具pprof 快速对线上服务的cpu.内存.goro ...

  6. java 对比工具_Java几款性能分析工具的对比

    在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件下的性能问题.理论上,增加对应用程序的负载会使性能有所下降,但是我认为性能下降的比率远远高于负载的增加,同时我也发现,性能可以通过改变应用程 ...

  7. Java练习题:字节缓冲流性能分析、 文档顺序恢复

    字节缓冲流性能分析 分别使用四种字节缓冲流进行文件复制测试其速度 这里准备了一个较大的视频文件130MB的视频文件进行测试 import com.wukong.io.BufferedInputStre ...

  8. Socket 实例之透析java,C#的互操作

    java,c#编程语言编写的程序之间是可以互相操作的.用java写的Socket聊天功能的服务端和客户端之间,和用C#编写的Socket聊天功能的服务端和客户端之间是可以相互通信的.简单的说就是,把C ...

  9. 黑马JAVA P163 字节缓冲流的性能分析

    package com.itheima.d2_byte_buffer_time;import java.io.*;public class ByteBufferTimeDemo {private st ...

最新文章

  1. 一般将来时语法课教案_「英语语法」一般过去时用法技巧全解
  2. centos php memcache扩展,CentOS安装php5的memcache扩展
  3. 服务器的攻与防(firewall 禁止指定Ip)
  4. 2019-10-27 控制领域期刊介绍
  5. GCD -- 倒计时
  6. Linux分区如何表示,Linux中硬盘分区的表示方法
  7. django如何给上传的图片重命名(给上传文件重命名)
  8. Django(part3)--制作我的第一个网页
  9. C语言课程学籍管理课程书面报告,C语言学籍管理系统课程设计报告书
  10. 设计模式学习笔记——责任链(Chain of Responsibility)模式
  11. MySQL中事务控制语句_Mysql事务控制语言
  12. JAVA调用NuSoap服务
  13. linux下用c语言写黄金矿工,c语言课程设计黄金矿工(提高篇)
  14. 【实战教程】使用知晓云完成微信卡券消息的处理
  15. python中字典的使用_python中的字典用法大全
  16. java将中文转为拼音
  17. 春招实习--海康威视凉--总结反思
  18. Broadcast广播-Android
  19. AI公司CEO冒充中科大少年班校友!清华、斯坦福名校经历全造假
  20. 【Scikit-Learn 中文文档】流形学习 - 监督学习 - 用户指南 | ApacheCN

热门文章

  1. 如何使用 U8g2 库
  2. 脊髓损伤的现场急救法
  3. adxl345取出值怎么算角度_adxl345角度测量文档
  4. 数据本质价值的一些思考
  5. Kotlin any/none/all 函数
  6. apache评分标准,简论毕业论文(标准格式)_APACHE评分系统评分表
  7. 2019斯坦福CS224n深度学习自然语言处理笔记(3)——分类模型与神经网络
  8. 分频器 偶分频 奇分频 任意分频
  9. 程序员如何查资料(百度、谷歌搜索技巧汇总)
  10. 这些校园跑腿创业容易忽略的地方,创业者要注意了