您的位置:首页 > 产品设计 > UI/UE

关于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: