for(int i= 0;i<10000;i++)
s+ = i+",";
StringBuilder sb = new StringBuilder()
for(int i= 0;i<10000;i++){
sb.append(i+",");
}
数组:
Hash 表
作为一种抽象数据结构,Hash表的实现思路如下:通过某种算法,在 键--值对的存储地址和 键--值对中的key之间,建立一种映射,使得每一个key,都有一个确定的存储地址于之对应。这种算法被封装在Hash函数中。在查找时,通过Hash函数,算出和key对应的存储地址,从而找到相应的键-值对。相对于通过遍历整个键-值对列表来进行查找,Hash表的查找效率要高得多,理想的情况下算法复杂度仅为o(1)(遍历查找的复杂度为o(n)).
C语言中没有提供现成的Hash表,但是C++提供了优秀的Hash表实现容器hash_map。像STL中的其他容器一样,hash_map.像STL中的其他容器一样,hash_map支持任何数据类型,支持内存自动管理,能够自动增长。特别地,hash_map通过模板机制,实现了和hash函数的剥离,也就是说,程序员可以定义自己的hash函数,交给hash_map
去进行相应的工作。如下例:
hash_map<string,int>hml;
//使用默认的Hash<string>函数
hash_map<string,int,hfct>hml;
//使用自定义的hfct()作为hash函数
hash_map<string,int,hfct,eql>hml;
//使用定义的hfct()作为hash函数,并且使用自定义的eql()函数比较对象是否相等
HashMap hm = new HashMap();
hm.put("akey","this is word");
//使用两个字符串作为键-值对
String str = (String) hm.get("akey");
System.out.println(str);
HashMap和hash函数也是剥离的,但使用了另一种思路。在Java中,根类型Object定义了hashCode()和equal()方法,由于任何类型的对象都派生自Object,所以它们都自动继承了这两个方法。用户自定义的类应该重载这两个方法,以实现自己的hash函数和比较函数。如果这两个函数没有被重载,Java会使用Object的hashCode()和equal()方法,它们的默认实现分别是返回对象的地址,以及比较两个对象的地址是否相等。
题目1: 请用Java或C编写一个程序,从N个整数中找出最大的一个。
for(int max=a[0],i=0;i<N;i++){
if (a[i]>max) max = a[i];
return max;
}
题目2:请用Java或C编写一个程序,找出两个整数的最大公约数。
int gcd(int m,int n){
if(n==0) return m;
return gcd(n,m%n);
}