100分 求最优算法根据地址反查行政区代码 (面试题之一.)

aspvfp 2012-04-02 05:57:18
110000 北京市
110100 北京市市辖区
110101 北京市东城区
110102 北京市西城区
110103 北京市崇文区
110104 北京市宣武区
110105 北京市朝阳区
110106 北京市丰台区
110107 北京市石景山区
110108 北京市海淀区
110109 北京市门头沟区
110111 北京市房山区
110112 北京市通州区
....略
120000 天津市
120100 天津市市辖区
120101 天津市和平区
120221 天津市宁河县
120223 天津市静海县
120225 天津市蓟县
130000 河北省
130100 河北省石家庄市
130101 河北省石家庄市市辖区
....
130107 河北省石家庄市井陉矿区
130108 河北省石家庄市裕华区
130121 河北省井陉县
.....
==========================
大概4000多行
以上是地址行政区代码文件

要求用 C# Framework 2.0
根据客户提供的地址 找到行政区编码

例 地址:北京市朝阳区南湖南路15号院甲1号 应返回 110105


要求效率最高的一种方法

行政区文件 可以导入数据库 也可以导成 XML 或者就普通文本

请大家支个招...












...全文
514 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
缪军 2012-04-03
  • 打赏
  • 举报
回复
楼主,把这些放在数据库中处理吧,别说4000条数据,
我做了个测试,七百万条数据(大小400兆),不需要任何索引,1秒钟之内搞定:
(这个sql算法如果再稍加优化,还能应付上亿级的数据)
--比如说:Create table t2(Code1 CHAR(6),Code2 NVARCHAR(50);
DECLARE @se NVARCHAR(100);
SET @se=N'北京市朝阳区南湖南路15号院甲1号';
SELECT * FROM(
SELECT * FROM t2
WHERE left(Code2,3)= LEFT(@se,3)) t
WHERE Code2=left(@se,len(Code2));


  • 打赏
  • 举报
回复
5。

如果面试时,能够写出5楼的代码,就应该可以录取了(在其linq代码上稍微增加一句 ret.OrderBy(...).FirsrDefault()语句)。

我们在面试时有过类似的上机编程题目,预留的时间是3个小时,可惜没有一人做出来这个题目。其实用五分钟时间写成5楼这样的2、3句话完成编程,也就算是做出来这道题了。
缪军 2012-04-03
  • 打赏
  • 举报
回复
现在我再次测试4000行/200k的数据,耗时在0-16ms之间
测试平均值如下:
从客户端发送的字节数	751	
从服务器接收的字节数 140.8
时间统计信息
客户端处理时间 2.9ms
总执行时间 8.0ms
服务器应答等待时间 5.1ms

showjim 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

谢谢楼上各位大侠的提醒 醍醐灌顶.

昨天特定去查了 字典树相关. 查找速度是上去了 可是构造树的时候占用了大量的内存空间
[/Quote]
4000数据能占几个内存?
即使使用分词的模糊查询,这种查询应该是几百ns级别的。
showjim 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]
你说的这种交互方式,我们十几年前就采用了,其实逐字检索更加容易实现,
出现位置不同,对于sql也就是用charindex或者padindex或者其他不同的字符串函数的区别

另外,我已经说了,我的测试样本是700万行/400M的数据,比楼主的数据复杂得多,
没用索引时,就算是用"="检索,返回0行,在我的机器上也需要1秒钟,
我不知道你说的毫秒以内如何实现,
又或者你是以服务器配置测试的,那我想,我的代码也会同样是毫秒级完成
[/Quote]
如果要求的是效率,这事就不是数据库能做的
showjim 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

谢谢楼上各位大侠的提醒 醍醐灌顶.

昨天特定去查了 字典树相关. 查找速度是上去了 可是构造树的时候占用了大量的内存空间
[/Quote]
4000数据能占你几个内存?trie图是关键,trie树(字典树)也可以,即使模糊查询用到分词,单次查询应该是?ns级别的。
aspvfp 2012-04-03
  • 打赏
  • 举报
回复
谢谢楼上各位大侠的提醒 醍醐灌顶.

昨天特定去查了 字典树相关. 查找速度是上去了 可是构造树的时候占用了大量的内存空间
缪军 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 的回复:]
[/Quote]
注意力放在性能评估上了,没注意算法有bug,改了一下,
(其实,这个写法简单而已,不一定就好,只是我觉得根据楼主提供的线索,应该没什么性能问题,
最终的算法还是要根据实际数据来优化,已测试结果为依据)

SELECT TOP 1 Code1,Code2 FROM(
SELECT Code1,Code2,Width=LEN(Code2) FROM t2
WHERE left(Code2,3)= LEFT(@se,3)) t
WHERE Code2=left(@se,Width))
ORDER BY Width DESC;

aspvfp 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
楼主,把这些放在数据库中处理吧,别说4000条数据,
我做了个测试,七百万条数据(大小400兆),不需要任何索引,1秒钟之内搞定:
(这个sql算法如果再稍加优化,还能应付上亿级的数据)

SQL code
--比如说:Create table t2(Code1 CHAR(6),Code2 NVARCHAR(50);
DECLARE @se NVARCHAR(100);
SET @s……
[/Quote]


这样好像有点小bug 会查出2-3条数据
只能用 个top 1 + desc


110000 北京市
110105 北京市朝阳区
=========河北省石家庄市桥东区某某某地址===============
会取出这样三条数据
130000 河北省
130100 河北省石家庄市
130103 河北省石家庄市桥东区



缪军 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
[/Quote]
你说的这种交互方式,我们十几年前就采用了,其实逐字检索更加容易实现,
出现位置不同,对于sql也就是用charindex或者padindex或者其他不同的字符串函数的区别

另外,我已经说了,我的测试样本是700万行/400M的数据,比楼主的数据复杂得多,
没用索引时,就算是用"="检索,返回0行,在我的机器上也需要1秒钟,
我不知道你说的毫秒以内如何实现,
又或者你是以服务器配置测试的,那我想,我的代码也会同样是毫秒级完成
  • 打赏
  • 举报
回复
业务是从第33个字符才开始出 --> 也许是从第33个字符才开始出


假设需要返回最后一次出现的行政区,但是必须是最长的(“北京市”就比“北京市朝阳区”短),而当用户按任意键包括backspave键的时候你又要每一次都重新查找,并且考虑到网络传输的速度对用户体验的影响,这个就要求使用比较有效率的算法来实现,使得每一次查询都在设计毫秒以内。
  • 打赏
  • 举报
回复
不一定行政区是在给定的第一个字符,业务是从第33个字符才开始出现“北京市朝阳区”这些字的。

另外,“1秒钟”太长了。比这个复杂好基本的(但是算法基本上一模一样)的需求,网页通过在用户打入每一个字时(类似于autocomplete)随时通过互联网访问到服务器,然后服务器找到复杂的规则中的地址信息,再返回到客户端,这整个程序也就是在0.5秒以内。实际上服务器端(普通pc机)的查找运算速度应该在15毫秒以下,并且计算要求比这个“行政区”查询要复杂多了。
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

在数据库中 select top 1 code
from mytable
where '北京市朝阳区南湖南路15号院甲1号'
like name +"%"
order by name desc
[/Quote]

这种搜索用不到半点索引(无法用到对地址信息的索引),跟#5楼是一类。还需要创建数据库,写入数据,跑到数据库系统里查询(而不是直接在应用程序内存里查询),比#5楼的要麻烦多了。

实际上如果遇到面试时“要求用 C# Framework 2.0 ”这种要求,我们不妨稍稍“鄙视”一下下。这都什么年代了,不用新的开发工具也就算了,连7年前的.net类库中的错误我们都不想订正了吗?要避免类库中的错误,就应该版本升级。
opopl 2012-04-02
  • 打赏
  • 举报
回复
在数据库中 select top 1 code
from mytable
where '北京市朝阳区南湖南路15号院甲1号'
like name +"%"
order by name desc
  • 打赏
  • 举报
回复
另外,其实#1楼是关键。#2楼说到用字典会“最快”。但是从最重要的启发式思路上看,则立的关键是首先要知道按照每一个字拆分而创建一个树,这样的数据结构是关键的。至于树的每一个节点的子树使用一个
List<Tree> (需要遍历子树的一个属性来知道每一个儿子代表的char,然后找到要深度查找的子树)
还是
Dictionary<char, Tree> (直接根据key找到要深度查找的子树)
其实不是最重要的。


所以#1的启发比#2楼的重要。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
2楼说的有点道理
要从右向左试探
北京市朝阳区南湖南路15号院甲1
北京市朝阳区南湖南路15号院甲
北京市朝阳区南湖南路15号院
北京市朝阳区南湖南路15号
北京市朝阳区南湖南路15
北京市朝阳区南湖南路1
北京市朝阳区南湖南路
北京市朝阳区南湖南
北京市朝阳区南湖
北京市朝阳区南
北京市朝阳区 找到 返回
[/Quote]

“2楼说的”跟你理解的正好相反。

比如说先去字典树上去找到“北”这个字,那么这个字下面就只有儿子节点“京”这个字,然后下面有一个儿子节点“市”这个字,再下面则有13个儿子节点(null、“市”、“东”、“西”、“崇”、“宣”、“朝”、“丰”、“石”、“海”、“门”、“房”、“通”),然后在“朝”下面有一个儿子节点“阳”.....

然后用你的文字作为输入,去从“北”这个字开始去字典树上深度搜索,最深地址能达到“北京市朝阳区”的“区”字的节点,于是就直接返回这个最深的结果了。而这个“区”的节点的值就是“北京市朝阳区”这几个字。

这样,假设你的行政地址不是4000条,而是400万条,那么从一个100个字的地址中找到第一次出现的行政区编号,也是毫秒级的一个方法而已。而#5楼的那个解法所耗的时间就很“恐怖”了。


不过话要说回来,不知道现在的学校教育是怎么回事,学了3年软件,甚至再工作2年的程序员,能够像#5楼那样给出答案的也只是少数。大多数人似乎只会套用模板,抄袭csdn上的答案,背诵概念。我真心的希望大多数程序员只至少都会学习#5楼那样学会迅速拿出一个解决方案的能力。要想有这样的能力,就应该学习linq等高级的、直接了当反应逻辑解题思路的好编程方法,解决新问题,而不要只是去一遍遍重复使用低级的工具做着千篇一律的“开发”工作。
threenewbee 2012-04-02
  • 打赏
  • 举报
回复
没有限制条件谈不上怎么解决。

必须给出测试用例。

输入数据可能是非标准化的,要不要考虑怎么处理。
输入数据是否有序。

我们要求一过性的速度还是反复查找的速度

等等。
WAN 2012-04-02
  • 打赏
  • 举报
回复
树 + 哈希
  • 打赏
  • 举报
回复
假设是查行政区代码的话,那么就从左向右查是最快的。比如只要是有“北”开头的行政区,那么就不可能再去考虑从“京”这个字以后的任何字符开始查找了。而从“北”开头的行政区中有几个与这个字符串相匹配,实际上很容易找到,你保留字符最多的一个行政区作为结果就行了。

这有一个数据结构的问题,就是假设先把4000行数据创建为单字的“倒排序”全文检索索引树,那么就可以非常快地搜索到。
aspvfp 2012-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

Dictionary<string, string> dict = new Dictionary<string, string>();

var ret = from kp in dict where "北京市朝阳区南湖南路15号院甲1号".IndexOf(kp.Key)> 0 select kp;

效率不是最高 但代码最少的方法
[/Quote]

这是LINQ吧 Framework 2.0 还不支持吧.
另外这样不不准确 可能会查到 北京市 这一级

2楼说的有点道理
要从右向左试探
北京市朝阳区南湖南路15号院甲1
北京市朝阳区南湖南路15号院甲
北京市朝阳区南湖南路15号院
北京市朝阳区南湖南路15号
北京市朝阳区南湖南路15
北京市朝阳区南湖南路1
北京市朝阳区南湖南路
北京市朝阳区南湖南
北京市朝阳区南湖
北京市朝阳区南
北京市朝阳区 找到 返回




加载更多回复(5)
Domain4.3(明小子)10.10.10更新版主要更新内容如下: 1.驱除部死连接,恢复部官方连接 2.改变默认显示页面为本人BLOG 3.修正程序在检测时出错的BUG 4.修正程序在部系统中无法启动的BUG 5.加了一个功能模块,但还不成熟,隐藏了,高手的话可以用OD调出来!>!< 6.修复前段时间一些朋友反映的错误和程序宏 7.增加四款SKN皮肤! 10.10.11紧急更新: 1.修正新版程序在部系统中启动后直接导致系统蓝屏的BUG 2.修正域名查询的几个错误 3.修正程序批量检测查询到域名的时候无反映的BUG! Domain4.2(明小子)10.01.16更新版主要更新内容如下: 1.删除所有无关数据 2.优化急速代码 3.改变启动线程 4.增加SQL数据批量导出功能 5.加入几个优化进程模块,非后门.后台运行. 6.锁定主程序栏目宽和高,不在恢复 7.删除“辅助工具”模块中全部代码 8.修正XP SP3 程序下兼容问题 9.重新改写域名查询旁站线程 程序于2010年01月16号调试完毕! 提别提示:第4个功能只能运行在完整版的windows XP 平台系统中,其他平台无法运行,如果出现恢复按钮并不能保存请自行调试与本程序无关.谢谢合作! 宝宝的话:有朋友们的鼓励才会有这个版本的发布,这当是我送给大家2010年里的第一个礼物吧。 Domain4.1(明小子)0901更新版主要更新内容如下: 1.增加新系统兼容模块,全面兼容2000-2008各系统 (部精简版系统除外) 2.优化网站打开速度,删减部无用内核信息,全面加快程序启动速度. 3.基于09.05.20号内核提升,改变搜查循环的一个死BUG! 4.删除在0520上增加的一个补针函数,并使用新的函数替换.保证不报错. 5.不在兼容xpsp3,因为没时间去修正这个错误。所以可能部SP3系统运行不起来本程序 6.增加部程序扩充空格代码,为下个版本更新做好铺垫 小提示:保留旧的IP反查连接系统,原因没有找到新的和稳定的IP反差服务器!如果有能提供的请与本人联系!谢谢合作 Domain4.1(明小子)0520更新版主要更新内容如下: 1.基于08.10.01号内核提升,修正一次关键错误。 2.替换原程序自带的那个小马,该为最新美化免杀版的小马! 3.添加一个服务器挂钩程序(非插件),使修改后的新内核兼容vista系统。 4.程序数据库默认名为:SetData.mdb 请大家使用3.5版本以上的MDB数据.其他低版本程序可能不兼容! 5.删除后台下载统计代码(以前没发现,本人也是从网站上面下的软件,排除作者自添加行为) 6.加了一个补针,针对sql注入功能中的一个小BUG。 7.删除了很多没有用的代码,最大限度的优化程序启动速度。 8.更新部在xpsp3下出错的几个小BUG(小问题小解决,这个错误仅针对部优化过度的XPSP3系统)。 提记:很多朋友说需要修改下程序IP域名查询功能,这里说明下.由于内核找不到关键句柄导致无法更新,下个版本在仔细看看! Domain4.0(明小子)1001更新版主要更新内容如下: 1.更新部过度优化过的系统不兼容问题。 2.修改内存识别函数,使其降低软件在使用期间所占用的内存大小。 3.基于08.09.15号内核提升,修正因修改软件所出现的几个导致软件崩溃的几个BUG。 4.换了软件自带的那个垃圾皮肤。加入兼容美化皮肤!更美观! 5.兼容前版本数据库支持功能 6.去掉了没有用的PHP入侵选项和几处小BUG...... 转贴是一种美德!享也是一种快乐,工具仅做辅助作用请勿用在非法用途上! 程序自带本BLOG连接,启动比较慢!不喜勿用!谢谢合作!
Google Android SDK开发范例大全(完整版)共4个卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent
Google Android SDK开发范例大全(完整版)共4个卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7 图文可视化提醒——Toast与LinearLayoutView 5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理器——自定义Adapter对象 5.12 还原手机默认桌面——重写clearWallpaper方法 5.13 置换手机背景图——Gallery与setWallpaper整合实现 5.14 撷取手机现存桌面——getWallpaper与setImageDrawable 5.15 文件资源管理器再进化——JavaI/O修改文件名及删除 5.16 取得目前File与Cache的路径——getCacheDir与getFilesDir 5.17 打开/关闭WiFi服务——WifiManager状态判断 5.18 取得SIM卡内的信息——TelephonyManager的应用 5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理 5.24 取得电信网络与手机相关信息——TelephonyManager与android.provider.Settings.System的应用 第6章 手机自动服务纪实 6.1 您有一条短信popup提醒——常驻BroadcastReceiver的应用 6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送email通知——BroadcastReceiver与Intent整合 6.6 手机拨接状态——PhoneStateListener之onCallStateChanged 6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——SensorListener及AudioManager整合应用 6.13 指定时间置换桌面背景——多AlarmManager事件处理 6.14 判断发送短信后的状态——BroadcastReceiver聆听PendingIntent 6.15 后台服务送出广播信息——sendBroadcast与BroadcastReceiver 6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得手机内置媒体里的图文件——ACTION_GET_CONTENT取回InputStream 7.7 相片导航向导与设置背景桌面——ImageSwitcher与Gallery 7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器——MediaPlayer与实现SurfaceView 7.15 相机预览及拍照临时文件——Camera及PictureCallback事件 第8章 当Android与Internet接轨 8.1 HTTPGET/POST传递参数——HTTP连接示范 8.2 在程序里浏览网页——WebView.loadUrl 8.3 嵌入HTML标记的程序——WebView.loadData 8.4 设计前往打开网页功能——Intent与Uri.parse 8.5 将网络图像网址放入Gallery中显示——URL.URLConnection.BaseAdapter 8.6 即时访问网络图文件展示——HttpURLConnection 8.7 手机气象局,实时卫星云图——HttpURLConnection与URLConnection和运行线程 8.8 通过网络播放MP3——Runnable存储FileOutputStream技巧 8.9 设置远程下载音乐为手机铃声——RingtoneManager与铃声存放路径 8.10 远程下载桌面背景图案——URLConnection与setWallpaper()搭配 8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的应用 8.15 手机下载看3gp影片——Runnable混搭SurfaceView 8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17 地震速报!——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——AutoCompleteTextView与GoogleSearchAPI 9.3 前端产生QRCode二维条形码——GoogleChartAPI 9.4 以经纬度查找目的地位置——GeoPoint与MapView的搭配运用 9.5 GPSGoogle地图——LocationListener与MapView实时更新 9.6 移动版GoogleMap——Geocoder反查Address对象 9.7 规划导航路径——DirectionsRoute 9.8 移动设备上的Picasa相册——GooglePicasaAPI 9.9 随身翻译机——GoogleTranslateAPI 第10章 创意Android程序设计 10.1 手机手电筒——PowerManager控制WakeLock并改变手机亮度 10.2 GPS轨迹记录器——利用LocationListener在地图上画图并换算距离 10.3 女性贴身看护——AlarmManager.DatePicker.TimePicker 10.4 手机QRCode二维条形码生成器——Canvas与SurfaceHolder绘图 10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...
Google Android SDK开发范例大全(完整版)共4个卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7 图文可视化提醒——Toast与LinearLayoutView 5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理器——自定义Adapter对象 5.12 还原手机默认桌面——重写clearWallpaper方法 5.13 置换手机背景图——Gallery与setWallpaper整合实现 5.14 撷取手机现存桌面——getWallpaper与setImageDrawable 5.15 文件资源管理器再进化——JavaI/O修改文件名及删除 5.16 取得目前File与Cache的路径——getCacheDir与getFilesDir 5.17 打开/关闭WiFi服务——WifiManager状态判断 5.18 取得SIM卡内的信息——TelephonyManager的应用 5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理 5.24 取得电信网络与手机相关信息——TelephonyManager与android.provider.Settings.System的应用 第6章 手机自动服务纪实 6.1 您有一条短信popup提醒——常驻BroadcastReceiver的应用 6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送email通知——BroadcastReceiver与Intent整合 6.6 手机拨接状态——PhoneStateListener之onCallStateChanged 6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——SensorListener及AudioManager整合应用 6.13 指定时间置换桌面背景——多AlarmManager事件处理 6.14 判断发送短信后的状态——BroadcastReceiver聆听PendingIntent 6.15 后台服务送出广播信息——sendBroadcast与BroadcastReceiver 6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得手机内置媒体里的图文件——ACTION_GET_CONTENT取回InputStream 7.7 相片导航向导与设置背景桌面——ImageSwitcher与Gallery 7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器——MediaPlayer与实现SurfaceView 7.15 相机预览及拍照临时文件——Camera及PictureCallback事件 第8章 当Android与Internet接轨 8.1 HTTPGET/POST传递参数——HTTP连接示范 8.2 在程序里浏览网页——WebView.loadUrl 8.3 嵌入HTML标记的程序——WebView.loadData 8.4 设计前往打开网页功能——Intent与Uri.parse 8.5 将网络图像网址放入Gallery中显示——URL.URLConnection.BaseAdapter 8.6 即时访问网络图文件展示——HttpURLConnection 8.7 手机气象局,实时卫星云图——HttpURLConnection与URLConnection和运行线程 8.8 通过网络播放MP3——Runnable存储FileOutputStream技巧 8.9 设置远程下载音乐为手机铃声——RingtoneManager与铃声存放路径 8.10 远程下载桌面背景图案——URLConnection与setWallpaper()搭配 8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的应用 8.15 手机下载看3gp影片——Runnable混搭SurfaceView 8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17 地震速报!——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——AutoCompleteTextView与GoogleSearchAPI 9.3 前端产生QRCode二维条形码——GoogleChartAPI 9.4 以经纬度查找目的地位置——GeoPoint与MapView的搭配运用 9.5 GPSGoogle地图——LocationListener与MapView实时更新 9.6 移动版GoogleMap——Geocoder反查Address对象 9.7 规划导航路径——DirectionsRoute 9.8 移动设备上的Picasa相册——GooglePicasaAPI 9.9 随身翻译机——GoogleTranslateAPI 第10章 创意Android程序设计 10.1 手机手电筒——PowerManager控制WakeLock并改变手机亮度 10.2 GPS轨迹记录器——利用LocationListener在地图上画图并换算距离 10.3 女性贴身看护——AlarmManager.DatePicker.TimePicker 10.4 手机QRCode二维条形码生成器——Canvas与SurfaceHolder绘图 10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧