java 板


LINE

<站内> ※ 引述《PsMonkey (痞子军团团长)》之铭言: : ※ 引述《TonyQ (骨头)》之铭言: : 我想问几件事情 : 你的 "容器" 指的是? Java Collections Framework 里的东西? 还是? : (毕竟一开始原 po 没有说清楚,我也搞不清楚) 就是Collection里的东西罗 可以容纳资料的东西都可以算容器吧...XD : 撇开 "容器" 是啥不谈 : (java.util.List 也没有看到跟 Comparator 有关的东西) 事实上有用到排序的都会用到这东西XD ex. TreeSet & TreeMap : Comparator 也可以用在 Arrays.sort() 当中阿 : 我到是觉得那边用起来比较实在... : (不知道哪里还能用 Comparator 的... [远目]) 目前为止看到的状况 通常这都是拿来排序的 XD : TreeMap 为什麽要那样子设计,我还有待研究 : (我就是没用过啦,你是要怎样... [翻桌]) : 但是,我觉得 Comparator 这种设计方法 : 是当有需要的时候,可以快速切换比较的方法 : 而不用去改程式码 : 当你 class 当中 field 很多,又要分别拿来比的时候 : 就十分好用 : 举个例子: : 模拟 Scheduler 的运作 : 我把 PCB 包成一个 class : 今天要挑一个 process 给 CPU 临幸 XD : 如果要 FIFO,那就把 Ready State 的 PCB 们变成一个 Array : 然後 Arrays.sort(pcb, new InTimeComparator()) : 如果要 SJF,那只要改成 : Arrays.sort(pcb, new JobLengthComparator()) 就掰掰再见 : 而我在 PCB 这个 class 还是 implement Comparable : 但是比较的是 Process ID 是啊 是这样没错 那我们的讨论差不多就可以到这里打个段落了吧XD ---------- 顺便再提一件跟Java Collection有关, 很有趣的事情,我用简短的程式码举例,XD 我先写一个非implement Comparable的简单物件。 假设我的目标是要把Person照着age排序并置入Set。 class Person{ int age; Person(int in){ age=in; } } ----------------------------------------------------------------- TreeSet<Person> ts=new TreeSet<Person>(); 因为TreeSet是会把资料排序的容器,放资料的时候就会进行比较的动作。 此时给它下列的叙述, ts.add(new Person(5)); //此时只有一笔资料 不需比较 ts.add(new Person(2)); //此时因为找不到compare,所以产生java.lang.ClassCastException: ----------------------------------------------------------------- <解一> 这是因为Person并没有implement Comparable的关系,如果 Person也去implement Comparable就可以解决了。 比方说在Person内加上类似这段程式码这样的东西就ok了 这是透过改变instant的方式去解决问题 public int compareTo(Object p){ if( age>((Person)p).age) return 1; else if(age==((Person)p).age) return 0; else return -1; } ----------------------------------------------------------------- <解二> 那我就告诉我的Set处理到这种Class的时候,用另一种比较方法, 其他的还是用本来的方法~~(透过Comparator) 这是透过容器去解决问题, (谜之音:这哪里简短了? (泪) 我发现用我的概念我要用好多行才写的出范例(再泪)) 底下的范例是透过Comparator去让 Person跟Object可以沟通... TreeSet ts=new TreeSet( new Comparator(){ public boolean equals(Object obj){ return false; } public int compare(Object o1, Object o2) { if(o1 instanceof Person && o2 instanceof Person){ return (""+((Person)o1).age).compareTo(""+((Person)o2).age); }else if(o1 instanceof Person){ return (""+((Person)o1).age).compareTo(o2.toString()); }else if(o2 instanceof Person){ return o1.toString().compareTo(""+((Person)o2).age); }else { return o1.toString().compareTo(o2.toString()); } } } ); for(int i=0;i<10;i+=2){ ts.add(new Person(i)); } for(int i=1;i<10;i+=2) ts.add("hi"+i); Iterator ir=ts.iterator(); while(ir.hasNext()){ Object t=ir.next(); if(t instanceof Person) System.out.println(((Person)t).age); else System.out.println(t); } ----------------------------------------------------------------- -- Local 学识不足,连写个范例都捉襟见轴,看来我真的该去好好进修了XD TreeSet Default的Comparator规则到底是甚麽啊 可恶 刚刚翻半天文件 翻不到只好蛮力硬干XD 意思到就好啦 别鞭太凶狠啊XD 要赶着出门去参加校队练球了掰~ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.138.240.58







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP