江都区城乡建设局网站马局,学php到做网站要多久,网站系统php源码,珠海营销网站建设试想这样一个场景#xff1a; 数据库表中 有 城市信息表 city_tbl#xff1b; 有院士信息表 ys_tbl #xff0c;其中院士有城市id字段#xff08;id#xff09;#xff1b; 但是不是所有城市都有院士#xff1b;
我们想要得到 城市的详细信息#xff0c;包括院士个数…试想这样一个场景 数据库表中 有 城市信息表 city_tbl 有院士信息表 ys_tbl 其中院士有城市id字段id 但是不是所有城市都有院士
我们想要得到 城市的详细信息包括院士个数且这些信息展现在同一张列表里面
方法一 查询城市列表然后在 依次发送sql 到 院士信息表 做相关统计这是比较low 的做法。。就sql 数据库而言如果城市是400个的话那么查询时间 大约1分钟
方法二 查询城市列表 用 select id as ID , count(1) as NUM 【不要用count(*) 】 from ys_tbl group by id 做分组统计; 这样一来就可以得到 两个 ListMapString, Object 剩下的处理流程如 下面的源码所示。。
这样处理的好处是一、减少操作数据库的次数二、 不需要做额外的查找操作除了 HashMap用到的 Hash查找算法外这种效率非常高。
【源码】 /*** 两个map的融合* author Tang Rong* date 2017年9月23日*/
public class MapMergeTest {public static void main(String[] args) {ListMapString, Object cityList new ArrayList();String[] cities new String[]{北京, 上海, 广州, 深圳, 成都};;for (int i 0; i cities.length; i) {MapString, Object map new HashMap();map.put(ID, i);map.put(NAME, cities[i]);map.put(DESC, 描述 i);cityList.add(map);}ListMapString, Object numList new ArrayList();/* 比如院士仅统计了上海广州深圳(模拟数据) */int[] nums new int[]{6, 9, 8};for (int i 1; i nums.length1; i) {MapString, Object map new HashMap();map.put(ID, i);map.put(NUM, nums[i-1]);numList.add(map);}ListMapString, Object result fillNum(cityList, numList);for (MapString, Object m : result) {IteratorString it m.keySet().iterator();while (it.hasNext()) {String key it.next();System.out.print([ key ] m.get(key) , );}System.out.println();}}// 填充一个map的人口数量到另外一个map通过hash查找 public static ListMapString, Object fillNum(ListMapString, Object cityList, ListMapString, Object numList) {ListMapString, Object result null;MapString, MapString, Object struct new HashMap();/* 把 posList 拆解 到 Map容器中 */for (MapString, Object map : cityList) {struct.put(map.get(ID).toString(), map);}/* 对 numList 进行拆解 */for (MapString, Object map : numList) {String rcrd_id map.get(ID).toString();MapString, Object posMap struct.get(rcrd_id);posMap.putAll(map);}return new ArrayListMapString, Object(struct.values());}
} 【运行结果】 [ID] 0, [DESC] 描述0, [NAME] 北京,
[NUM] 6, [ID] 1, [DESC] 描述1, [NAME] 上海,
[NUM] 9, [ID] 2, [DESC] 描述2, [NAME] 广州,
[NUM] 8, [ID] 3, [DESC] 描述3, [NAME] 深圳,
[ID] 4, [DESC] 描述4, [NAME] 成都,