关于map,set,list,hashtable和String以及StringBuilder的测试
2011-05-13 10:14
387 查看
public class MapDemo { /** * HashSet,HashMap和HashTable的区别 * 1.HashTable是同步的,线程安全的,源代码有synchronized 修饰符 * HashMap不是 * 2.HashTable只能有一条记录key为null, * 经验证:Hashtable在put时不能存入null值无论null值还是null键都不可存入。但是在取不存在的key值时返回null * * HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value * 经验证:null被HashMap当做一个对象进行处理,可以是key或者value,符合HashMap只有一个key的要求,重复put会覆盖以前put的值 * 3.父类不同 Hashtable的父类是Dictionary,HashMap是AbstractMap的实现 * * Set和List的区别 * hashset不会有重复数据。分析源代码,发现hashset的值使用的是map的key,因为map的key不可重复故set值也不重复 * list内数据按顺序插入,数据可以重复。分析源代码,发现ArrayList使用的是数组,没插入新元素,都copy一份旧数组加上新元素组成一个新数组,并且销毁原数组 * * String和StringBuilder比较。 * String字符串连接的=+号是生成一个新StringBuilder对象,后面的+号使用append()方法。 * 所以如果有很多的=+或+=就会创建很多StringBuilder对象。占用系统空间和时间。 * 所以使用+连接字符串的效率低于使用StringBuilder */ public final static MapDemo ins = new MapDemo(); private MapDemo() {} public String getString(int num){ String s = ""; Random rand = new Random(); for (int i = 0; i < num; i++) { s = s + rand.nextInt(1000) + " "; } return s; } public String getStringBuilder(int num){ StringBuilder sb = new StringBuilder(); Random rand = new Random(); for (int i = 0; i < num; i++) { sb.append( rand.nextInt(1000)).append(" ") ; } return sb.toString(); } public void testString(int num){ System.out.println("组成"+num+"遍字符串"); long start = System.currentTimeMillis(); getStringBuilder(num); long end = System.currentTimeMillis(); System.out.println("使用StringBuilder耗时 "+(end-start)); start = System.currentTimeMillis(); getString(num); end = System.currentTimeMillis(); System.out.println("使用String耗时 "+(end-start)); } public void testHash(){ testHashMap(); testHashTable(); testHashSet();//set数据不可以重复 testArrayList();//list数据可以重复 } private void testArrayList() { System.out.println("测试List...."); List list = new ArrayList(); list.add(1); list.add(2); list.add(1); list.add("string"); list.add("string"); Iterator iterat = list.iterator(); System.out.println("列出list中数据"); while(iterat.hasNext()){ System.out.println(iterat.next()); } System.out.println("List数据可以重复."); System.out.println(); } public void testHashSet(){ System.out.println("测试HashSet...."); Set hashSet = new HashSet(); hashSet.add(null); System.out.println("加入null"); hashSet.add(null); System.out.println("加入null"); hashSet.add(1); System.out.println("加入"+1); hashSet.add(1); System.out.println("加入"+1); hashSet.add("string"); System.out.println("加入string"); hashSet.add("string"); System.out.println("加入string"); Iterator iterat = hashSet.iterator(); System.out.println("列出set中数据"); while(iterat.hasNext()){ System.out.println(iterat.next()); } System.out.println("HashSet没有重复数据."); System.out.println(); } public void testHashMap(){ System.out.println("测试HashMap...."); Map hashmap = new HashMap(); try { hashmap.put(null, null); if(hashmap.get(null)==null){ System.out.println("key和value都可以为null."); } } catch (Exception e) { System.out.println("key和value都不可以为null."); } try { hashmap.put(null, 1); System.out.println("key可以为null,value值被覆盖:"+hashmap.get(null)); } catch (Exception e) { System.out.println("key不可以为null."); } try { hashmap.put("key", null); if(hashmap.get("key")==null){ System.out.println("value可以为null."); } } catch (Exception e) { System.out.println("value不可以为null."); } System.out.println(); } public void testHashTable(){ System.out.println("测试Hashtable...."); Hashtable hashtable = new Hashtable(); try { hashtable.put(null, null); if(hashtable.get(null)==null){ System.out.println("key和value都可以为null."); } } catch (Exception e) { System.out.println("key和value都不可以为null."); } try { hashtable.put(null, "------"); System.out.println("key可以为null,value值被覆盖:"+hashtable.get(null));; } catch (Exception e) { System.out.println("key不可以为null."); } try { hashtable.put("key", null); if(hashtable.get("key")==null){ System.out.println("value可以为null."); } } catch (Exception e) { System.out.println("value不可以为null."); } System.out.println(); } public static void main(String[] args) { MapDemo.ins.testHash(); MapDemo.ins.testString(100); MapDemo.ins.testString(10000); } }
输出结果
测试HashMap.... key和value都可以为null. key可以为null,value值被覆盖:1 value可以为null. 测试Hashtable.... key和value都不可以为null. key不可以为null. value不可以为null. 测试HashSet.... 加入null 加入null 加入1 加入1 加入string 加入string 列出set中数据 null 1 string HashSet没有重复数据. 测试List.... 列出list中数据 1 2 1 string string List数据可以重复. 组成100遍字符串 使用StringBuilder耗时 0 使用String耗时 0 组成10000遍字符串 使用StringBuilder耗时 16 使用String耗时 875
相关文章推荐
- Spring学习笔记 关于Bean属性的初始化 - 使用inner bean以及List, Map与Set的初始化
- Set、List、Map以及Arraylist、LikedList、Vector、Hashtable、HashMap的介绍
- 关于容器的用法(vector,deque,list,set,map etc.)
- 一段代码搞懂关于Java中List、Set集合及Map的使用
- Spring review--常用属性String、int、list、set、Map的注入
- List,Set,Map用法以及区别
- List,Set,Map用法以及区别
- List,Set,Map用法以及区别
- 关于List、Set、Map集合的简介(二)
- List,Set,Map用法以及区别
- java(20130802)Set:HashSet TreeSet、Map(接口):HashTable Hashmap、比较list set map
- java 中的 set以及集合,map,list等的理解
- list , set ,map 三者的用法以及区别
- java中 HashMap和Hashtable,list、set和map 的区别
- 集合collection的实现类List,set以及map
- Bean作用域的配置以及 Spring各种注入方式实例 list set map props
- 关于Map和List的性能测试报告
- list、vector、deque、map以及set类型分别使用的情况
- Java 集合类 map set list arraylist hashmap hashtable
- Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector