日期:2014-05-16  浏览次数:20389 次

java 实现数据库的group by

有下面一组数据,数据量大概有1000条左右,如何在时间复杂度是O(n)的前提下,实现分组

例如:

1 234
1 sds
2 sdsdsd
2 wwwwwww
1 ssassassww
4 sdsaass
5 234
1 skskks
.....

结果:

1 [234,sds,ssassassww,skskks]
5 [234]
2 [sds,sdsdsd]
4 [sdsaass]

?

package littlejava;

import java.util.ArrayList;
import java.util.List;

/*
 * 有下面一组数据,数据量大概有1000条左右,
 * 如何在时间复杂度是O(n)的前提下,实现分组 
 */
public class GroupBy 
{
	
	public static void main(String [] args)
	{
		String [] input= new String[] { "1:234", "1:sds",   
	            "2:sdsdsd", "2:wwwwwww", "1:ssassassww", "4:sdsaass", "5:234",   
	            "1:skskks" };
		List[]listArray = groupby(input);
		for(int i=0;i<listArray.length;i++)
		{
			List alist =  listArray[i];
			if(alist!=null)//不为null,就不要输出否则抛出异常
			{
				System.out.print(i+": ");
				for(int j=0;j<alist.size();j++)
				{
					System.out.print(alist.get(j)+",");
				}
				System.out.println();
			}
		}
		
	}
	
	public static List[] groupby(String [] arrayStr)
	{
		List[]listArray=new ArrayList[arrayStr.length];//只是生成一个数组,每个元素的ArrayList还没生成
		String strtemp;
		for(int i=0;i<arrayStr.length;i++)
		{
			strtemp=arrayStr[i];
			String str_index = strtemp.split(":")[0];   
	        String value = strtemp.split(":")[1];
	        int index = Integer.parseInt(str_index);
	        if(listArray[index]==null)
	        {
	        	listArray[index]=new ArrayList();//这是要生成ArrayList
	        }
	        
			listArray[index].add(value);		
		}
		
		return listArray;
	}
	
}

?