您的位置:首页 > 编程语言 > Java开发

【ThinkingInJava】55、对set中的操作测试性能比较

2015-05-22 08:05 363 查看
/**
* 书本:《Thinking In Java》
* 功能:对set中的操作测试性能比较
* 文件:SetPerformance.java
* 时间:2015年5月5日08:28:23
* 作者:cutter_point
*/
package Lesson17Containers;

import java.util.*;

public class SetPerformance
{
	//创建的是一个Test<Set<Integer>>的list容器,在Test里面使用的是Set<Integer>类型,也就是等会test函数里面第一个参数的类型
	static List<Test<Set<Integer>>> tests = new ArrayList<Test<Set<Integer>>>();
	
	static
	{
		//测试set的add
		tests.add
		(
			new Test<Set<Integer>>("add")
			{
				@Override
				int test(Set<Integer> set, TestParam tp)
				{
					int loops = tp.loops;
					int size = tp.size;
					for(int i = 0; i < loops; ++i)
					{
						set.clear();
						for(int j = 0; j < size; ++j)
						{
							set.add(j);
						}
					}
					return loops * size;
				}
			}
		);
		
		//测试set的contains
		tests.add
		(
			new Test<Set<Integer>>("contains")
			{
				@Override
				int test(Set<Integer> set, TestParam tp)
				{
					int loops = tp.loops;
					int span = tp.size * 2;
					for(int i = 0; i < loops; ++i)
					{
						for(int j = 0; j < span; ++j)
						{
							set.contains(j);
						}
					}
					return loops * span;
				}
			}
		);
		
		//测试set的iterate
		tests.add
		(
			new Test<Set<Integer>>("iterate")
			{
				@Override
				int test(Set<Integer> set, TestParam tp)
				{
					int loops = tp.loops * 10;
					for(int i = 0; i < loops; ++i)
					{
						Iterator<Integer> it = set.iterator();
						while(it.hasNext())
							it.next();
					}
					return loops * set.size();
				}
			}
		);
	}

	public static void main(String[] args)
	{
		Tester.fieldWidth = 10;
		Tester.run(new TreeSet<Integer>(), tests);
		Tester.run(new HashSet<Integer>(), tests);
		Tester.run(new LinkedHashSet<Integer>(), tests);
	}

}


输出:

------------- TreeSet -------------

size add contains iterate

10 394 76 24

100 57 26 6

1000 63 53 5

10000 80 76 5

------------- HashSet -------------

size add contains iterate

10 289 67 30

100 13 7 5

1000 18 10 4

10000 19 10 4

---------- LinkedHashSet ----------

size add contains iterate

10 227 29 21

100 25 11 7

1000 27 14 7

10000 27 14 6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: