是这样的,给一组数据 比如
13712345670
13712345671
13712345672
13712345673
13712345674
13712345675
13712345676
13712345677
13712345678
13712345679
13712345670
就可以合并为一个字冠1371234567
如果数据中还有
1371234560
1371234561
1371234562
1371234563
1371234564
1371234565
1371234566
1371234568
1371234569
就还可以合并成
137123456
最后剩下的就是一些不能在合并的字冠组;
比如中国所有理论上的手机号码做输入数据的话,最后的结果就是  13 和15
这样,每天都有很多很多很多条数据,比如200w条在sql server里我的方法是做一颗树,然后每个节点有10个叶子就剪掉他的叶子,让这个节点做叶子。
但是这样要把整个数据都读到内存。各位大大有没有什么更好的办法。er……,说那么多,不知道描述清楚了没

解决方案 »

  1.   

    闲着没事,给你写了个简单代码,如下:
    package com.lihan;public class testNum {
    public Long sum(Long[] i){
    Long max=i[0];
    for(int k=0;k<i.length;k++)
    {
    if(i[k]>max)
    {
    max=i[k];
    }
    }
    return max;
    } /**
     * @param args
     * @author  李晗
     */
    public static void main(String[] args) {
    String[] num={"13712345671","13712345672","13712345673","13712345674","13712345675","13712345676","13712345677","13712345678"};
    Long[] j=new Long[num.length];
    for(int i=0;i<num.length;i++)
    {
    j[i]=Long.parseLong(num[i]);
    }
    testNum t=new testNum();
    Long sum=t.sum(j);
    String str=String.valueOf(sum);
    String s=num[0];
    for(int x=0;x<s.length();x++)
    {
    if(str.charAt(x)==s.charAt(x))
    {
    System.out.print(str.charAt(x));
    }
    }
    // TODO Auto-generated method stub }}直接运行即可