java04_数据结构心得

Java课中数据结构的学习不仅方便java中数据的处理 为了不丢掉专业课中的++   我也在学习的过程中接触了一些c++的数据结构  两者原理并通 所以并没有多费多少功夫

总的来说 学习数据结构的顺序大概分为课上听老师讲每种结构的概念及一些方法的运用

而后回家看文档 将每种方法都大概看一遍  大概知道有这么一种方法  在以后的时候想起来就能用

 

程序可以简单的分成数据结构加算法  而程序最主要的功能就是为了增删改查

所以考虑一个数据结构的性能就是考虑其  增删改查  的性能

 

 

Java中数据结构大致分为 list set map

List为线性  具有循序性  每次增删改查需从“线”的相对位置来取

Set 类似集合  操作需要索引或者遍历

Map 中存着索引与值  所有操作值的动作都需要用到索引  maplist连用就能实现一个二维数组

应该知道的是  三种数据结构都为类  定义出来的对象为容器  可以说容器的逻辑不同导致其性能就不同

List 分为ArrayLIstLinklist

ArrayLIst 可以理解为数组的扩充 内存在物理上是连续的  由于其连续性 在数据需要增加和删除时要移动所有临近的数据以维持其连续性 但是便于遍历 即(查)

 

Linklist 解决了ArrayLIst增加删除时间损耗的问题  因为linklist每个元素由下一个地址和元素组成一个元素连着另一个元素  其空间上不连续  但是每次增加和删除的时候 只要将前一个元素的下位地址改为自己后一个元素的地址 再将本身删除即可 只需要操作两步  大大提升速度  但是由于其物理上的不连续 所以当频繁查询时  速度还是不如ArrayList

 

Set 分为HashSet  TreeSet

Set数学名为集合 其中方法可用于集合运算  为了体现其集合元素不重复的性质 hashset

treeset分别用两种不同的方式

Hashset 每个元素添加进去时  都会自动调用内部封装的hashCode()函数  为其生成一个hashcode(哈希值)其值作为元素的唯一标识 通过其取元素能够跳过其他元素 某种程度上加快了取值速度  而为了不重复  添加时还自动调用了内部封装的equals()函数 用于比较这个数跟集合中其他元素有无重复  如果重复 则自动覆盖  默认的equals函数比较的是两个元素的哈希值  

当自己创建一个类想要装入hashset定义的对象时 系统就会报错并提示需要重写hashcode函数和equals函数用于判断集合里面元素有无重合 一般来说我的习惯就是equals函数直接还是比较哈希值  然后根据自己需要重写hashcode函数就行

这里有个例子

eg.只知道几个三角形的3条边abc  设计集合不能存储相似三角形 并输出这个集合

分析 不能存储相似三角形  即只要是相似三角形对象相互比较时equals的值是true

那就重写hashcode函数  我设计返回的哈希值为a/b*100+b/c这样就能保证相似三角形的哈希值是一样的从而equals比较出来的值是一样的

super代表是由父类调用的)

 

 

 

 

这样 就算集合中添加了4个数  但是还是只显示两个

 

 

Hashset不同 TreeSet用另外一种方法实现互异性

 

实现(implementcomparable接口 里面存放着dog这个类  然后系统提示重写comparato

函数  这时候比较的就是类中你想排序的数据  然后return两个数据的差值

这样  输出treeset定义的对象  系统自动就会给容器中的元素排序

 

这样 虽然输入了4个值 但通过比较 排除了一个对象  并对剩下的对象排序输出

 

如果想看到排序的结果可以在dog类中重写tostring方法已达到目的

 

 

 

 

 

map也分为 Hashmaptreemap  同理 存储的思想同上述相同

不过map通过key(键)操作value(值)map.put(key,value)keyvalue建立索引 即key指向value这样当存入多个数据之后map.put(key1,value1)map.put(key2,value2)map.put(key3,value3)map.put(key4,value4);之后 便有了这样的数据结构

Key1

key2

key3

key4

value1

value2

value3

value4

这样 map嵌套进list结构中list.add(map1);list.add(map2);list.add(map3);list.add(map4;

Key1

key2

key3

key4

 

 

value1

value2

value3

value4

 

 

Value5

6

7

8

 

 

9

10

11

12

 

 

13

14

15

16

 

 

 

 

 

 

 

 

便实现了二维数组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值