作者swpoker (swpoker)
看板java
标题Re: [问题] 提昇搜寻的效率
时间Wed Jun 19 14:33:53 2013
其实问题有点模糊
不过我想这应该是程式语言跟java的问题
因为c都是阵列拉~指标啦~等等可以让你碰到底层的演算法
可是java并没有这样子
所以如果你一开始就学资料结构 学C
再来用java 会搞的很乱
实际上除非你自己写套件
不然像我
没学过演算法
没学过资料结构
没学过C
不知道什麽是指标
不知道什麽位移
更别说什麽tree了
对於只会打电动其他什麽都不会的情况下
一开始就碰java
然後我就照着java.util里面提供的套件去用
老实说,我根本就不知道里面到底在干麻!!!
其实我学习的顺序刚好跟大家相反
在这个问题
首先要厘清的是
insert get-->这些方法的定义是什麽?
物件的定义是什麽?
那笔资料的index->定义为何?
所以我只好公堂之上大胆假设一下
你的get是
1.XXObject get(); 这样吗?
FIFO? LIFO?
还是
2.XXObject get(XXType index);这样吗
index是???
先定义好模组的行为
再来讨论一下实作的方式跟细节
因为往往问题确定了,其解决的实作竟然是不可思议的简单!!!
所以你愿意分享一下你所规划的介面吗
(顺便要有注解喔)
PS.在这里我只用我的想法来写测试案例
(所以想法肯定会跟原PO不同)
XXXList xxxlist = instanceofXXXList();
xxxlist.insert(XXXBeanA("id022"));
String key = "id01234";
XXXBeanA bean_null=xxxlist.getByKey(key);
Asserts.equalsNull(bean_null);
xxxlist.insert(XXXBeanA("id6789"));
xxxlist.insert(XXXBeanA("id649"));
xxxlist.insert(XXXBeanA("id99789"));
Asserts.equals("id99789",xxxlist.getLast().getId());
Asserts.equalsNotNull(xxxlist.getByKey("id649"));
在这里我定义了
void insert(XXXBeanA bean);
XXXBeanA getBykey(String key);
XXXBeanA getLast();
三种行为及其相关的IO参数
(以上我都还没实作,保证编译全部红字!!!)
然後我就来找找到底用什麽方法会更有效率呢?
所以这种问题可以用TDD来思考喔!!!!!
然後getLast()真的很简单!!!
因为
XXXBeanA last_beanA = null;
public void insert(XXXBeanA bean){
//放到按照演算法的容器里面
_handle(bean);
//放置最後
last_beanA=bean;
}
public XXXBeanA getLast(){
return last_beanA;
}
得到最後新增的物件用这样方式就可以达到了
连什麽演算法都不用!!!
以上的操作并没有考虑thread safe喔
※ 引述《sudada (叽咕叽咕叽咕)》之铭言:
: 各位好
: 最近遇到一个sorting的问题
: 假设我有一个List里面放我自订的class
: 他必须是个排序好的状态
: 但是每次有新增或更新资料 我都必须取得那笔资料的index
: 而且使用上get的使用机率应该会比insert高一点
: ^^^
: 这边修正一下...
: 目前我有两种想法
: 第一
: 每次丢资料进去都call一次sort
: 不过这样没办法直接知道我刚刚新增的那笔资料
: 到底会被丢到哪里去
: 所以sort完以後还要再抓一次index?
: 这种方法我觉得完全不可行......
: 第二
: 跑回圈用自己的compare方式找到适当的位置
: 直接call insert
: 这样"感觉上"快很多
: 但是问题出在用List的资料结构的话
: 每次都必须从头开始 cost应该是O(n)?
: 如果要改进这里势必要改资料结构
: 用binary tree又怕会影响整体get的效能
: 想请问大家会怎麽取舍
: 谢谢
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.29.131
※ 编辑: swpoker 来自: 163.29.29.131 (06/19 14:50)
1F:→ swpoker:我是不是有改到推文阿~刚刚没注意到~不好意思阿 06/19 14:51
2F:→ swpoker:getLast()->得到最後新增物件 06/19 15:19
3F:推 KanoLoa:我重看了几次,还是不懂你这篇再回原PO的那些问题...orz 06/19 20:39
4F:→ swpoker:老实说~我也不太懂原PO的问题在哪? 06/20 09:15