java基础巩固训练营【第一轮】(七) 数据结构中的java

本章的测试代码存放在 com.j2ee110.csdn.leader.datastruc包路径下面

大家的练习代码存放在 com.j2ee110.csdn.student.姓名标识.datastruc包路径下面 

 

数据结构可能是大家比较头疼的一个问题,其实我也很头疼,至今《数据结构》这本书上关于排序时间复杂度的那段文字我还是没有彻底的看董。其实数据机构在变成中是一个重要的概率,先贤大牛总结的好“数据结构+算法=程序”,这句话太对了。但是我们需要思考的是,什么是数据结构,数据机构是干什么用的呢?我觉得数据机构其实就是数据储存的方式,那数据是什么呢?

 

在java中数据就可以使java的基本类型(基本类型链接),java对象(对象链接),我都可以成为数据,那么数据结构就是这些数据的存储方式。比如我们需要计算两个数值变量的和,那我们可用两个变量来存储需要计算的数据,但是如果我们需要计算10万个变量的和,那么定义10万个变量也是可以的,但是这是一件耗时费力的苦力工程,读者中愿意干的的人估计为负数,所以就引入了数组。的那是数组有个问题是,数据的容量(长度)在定义的时候就已经确定了,一定数据定义之后其长度不能修改,但是在现实的应用中我们可能并不知道我们需要存储的数目,因此产生的动态的数据,在java中就是我们常见的集合类。

 

我在说下去大家就烦了,其实我也烦了,因为很多理论其实至今我也没有具体的用过,所以我们还是看看在具体的应用中我们会用到那些数据结构。我将我们经常用的数据结构划分为简单的三大类

 

 

字符串

 

字符串存储的是最简单的数据类型,其实就是一堆字符的集合,通常存储一下文本类的数据,比如我们要从一个文本文件中将字符“a”替换成“b”,这个时候我们一般首先会读取文本文件,然后将其存储在一个字符串中,然后对其进行操作。

 

字符串是一种非常常用的数据结构,我们平时用到的机会非常的多,对字符串有很多常用的操作,比如截取,替换,拼接等,这些都是我们经常会用到的。

 

 

数组

 

字符串只能处理简单的字符集合,但是遇到比较复杂的java对象字符就不行了,这时数组出来了。比如,在上一章中让大家建定义一个employee对类,如果我创建10个employee的对象,那么需要用10个变量来存储,那可是繁重的苦力工程啊,这时如果用数组就很容易的将这些对象存储起来。

 

数组在存储同一类型的多个变量时候很方便,但是数组有一个缺点,就是数组在定义的时候就决定了其大小,一旦定义后就不能改变。

 

但是我们在实际的开发中很多时候,在使用之前都不知道需要存储的对象数目是多少,这个时侯时候使用数组很不方便,因此在java中便引入了集合框架。

 

java集合框架可以写一篇很长的文章,而且网上有写的很好系列,我就不班门弄斧啦。但是在我们的第一轮中,我觉得大家先掌握两个比较常用东东

 

一个是   List接口,java.util.List,还有一个事List接口的实现类  ArrayList。

 

这个时候有人也许会骂我,java集合框架那么重要的东西,你就这么随随便便的就讲两个类,这不是不负责任吗?

 

呵呵,我的建议是,与其知道那么多,但都不会用,我们还不如就记住这两个,并且能用。不要忘记我们第一轮宗旨是,先学会用,把程序跑起来,然后在慢慢的探究其原因。

 

如果您还是有意见那就那句话,我用我的想法写,您用您的智慧读!

 

 

 

 

哈希表

 

 

数组和hash表都是数据的存储方式但是他们是有区别的,什么区别了,我们还是看一个例子吧,这里我很想把例子贴出来,但是最终我是觉得用代码来说吧更好,所以大家可以从我的SVN 服务器中下载我们的代码

 

/sample/com/j2ee110/csdn/sample/

 

首先为了计算我们还是需要先创建一个对象,我自作主张的把这个对象命名为employee,而不是student,因为我觉得大家从现在开始要学会转换角色,不要老是把自己当学生,我们已经成年了,不是小孩了,不要老是找这样的借口,我还是学生没有经验,以后有了经验就会好的。

 

我们建立以班级的学生数组,然后我们需要从中找出姓名为“fengx”的学生,首先用数组完全是可以的,算法很简单,遍历,然后取出每个对象的name属性比较,代码如下

 

但是用哈希表存储数据呢? 

 

在java中如果需要使用哈希表首先需要用到Map接口和HashMap对象,记住这不是必须的而是最常用的。

 

Map employeeMap = new HashMap();

 

employeeMap 就是被创建的Map对象,根据哈希表的定义,每存储一个对象均需要为该对象设定一个Key,这个key就是以后快速查找的索引。

 

到了这里我建议大家先花20分钟看一下我们提供的实例代码,请大家仔细看一下代码的注释,看完之后有什么问题可以跟我联系,建议先发一封邮件详细的说明问题,说明你的出现问题的代码和代码,然后上传代码,然后QQ提醒我,如果我处在空闲期,我会一般会马上恢复。

 

小提示:

string 和 StingBuffer 他们之间的区别需要指出,在第二期中用观察器来产看内存的使用情况

 

在第二期中可以稍微介绍一下树,图等数据结构

 

 

课后练习

大家还记得我们在第五章给大家的作业,在这个作业里面大家建立了相关的对象,那现在可以用到他们了。我们就利用这些对象完成下面的要求

1、创建10个“产品”对象,分别用数组,List集合,Map,这三种方式存储这个10个对象。注意这个10个产品对象的“产品名称”属性不能重复

2、创建三个方法,根据“产品名称”属性,分别从数组,List,Map中找出“产品名”符合的对象。如果大家不清楚这段问题那请参考com.j2ee110.csdn.leader.datastruc.Sample 这个代码。我始终觉得代码是最好的描述方式。

 

注意大家在编写代码的时候一定要写注释啊!

 

暑期java基础巩固训练营开始
java基础巩固训练营 简介
java基础巩固训练营【第一轮】(一)项目环境和规范
java基础巩固训练营【第一轮】(二)JAVA基础
java基础巩固训练营【第一轮】(三) 编写、编译、运行 
java基础巩固训练营【第一轮】(四) 利器(IDE工具)
java基础巩固训练营【第一轮】(五) 基本数据类型
java基础巩固训练营【第一轮】(六) 面向对象的JAVA
java基础巩固训练营【第一轮】(七) 数据结构中的java
java基础巩固训练营【第一轮】(八) 文件读写
java基础巩固训练营【第一轮】(九) 用java通信
java基础巩固训练营【第一轮】(十) 多线程
java基础巩固训练营【第一轮】(十一) 直面错误--java异常
java基础巩固训练营【第一轮】(十二) 我们一起来找茬
ava基础巩固训练营【第一轮】(十三) java桌面应用
java基础巩固训练营【第一轮】(十四) 大家一起做项目

 

 如果您对我的文章感兴趣的话,请点击这里加我为好友,让我们一起进步
 

http://student.csdn.net/invite.php?u=106708&c=2383a3846076c876

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值