Archive | ภาษา RSS feed for this section

Switch กับ If-else อะไรเร็วกว่ากัน

เมื่อคืน pFz เอา url ที่เกี่ยวกับการเปรียบเทียบระหว่าง switch กับ if-else โดยคำตอบก่อนที่ pFz จะแจมไปก็คือ if-else เร็วกว่า แต่ pFz แย้งไปตรงข้ามเพราะ compiler ส่วนใหญ่จะมีการแต่ง switch ให้เร็วขึ้นโดยการแปลงเป็น hash table ซะ ดูไปก็ไม่รู้หรอกว่าอะไรจะเร็วกว่า เลยลองเขียน จาวากับซีมาทดลองดูให้เห็นกันไปเลย sourcecode: Java, C ผลสรุปก็คืออะไรจะเร็วกว่าอะไรขึ้นกับ จำนวนกรณีที่นำมาเปรียบเทียบยิ่งเยอะจะยิ่งเห็นผลชัด กรณีที่ตกลงไปในการเปรียบเทียบ จากโค้ดก็คือค่า cSample นั่นเอง โดยถ้าตกในกรณีแรกของ if หรือ case แน่นอน if จะเร็วกว่า แต่ถ้าตกกรณีหลังๆ switch จะเร็วกว่า ผลลัพธ์ เลขบนคือ switch เลขล่างคือ if-else Java, cSample = 0 llun@pluto:~/Desktop/test$ [...]

Read full story Comments { 6 }

Anonymous คลาสกับการเพิ่มและเรียกใช้ method

Anonymous คลาสในจาวาคือคลาสที่เขียนแทรกขึ้นมาโดยไม่มีชื่อเลย เวลาเรียกใช้ปกติก็จะผ่าน interface หรือ abstract class ที่เป็นต้นแบบทำให้มีข้อจำกัดอยู่สองสามอย่างคือ 1. ไม่มี constructor เนื่องจากการสร้าง constructor ในจาวาต้องรู้ชื่อคลาส ซึ่งมันไม่มีในคลาสแบบนี้แล้วมันจะไปสร้างได้ยังไงหละจริงมะ 2. ไม่สามารถเพิ่ม method ได้เพราะถึงเพิ่มไปก็ไม่รู้จะเรียกใช้ยังไงภายหลัง แต่วันนี้ผมจะมาแก้ปัญหาข้อสองหละ เพราะถ้าจะหลีกเลี่ยงโดยไปสร้าง Inner คลาสก็รู้สึกมันจะเยอะเกินไปอีก ใช้แค่นิดเดียวเอง ทำไมต้องสร้างคลาสใหม่ที่มีชื่อด้วยจริงมะ มาดูโจทย์ผมเลยละกัน คือผมจะสร้าง Map แบบพิเศษที่ key 1 key สามารถเก็บค่าได้หลายค่า และสามารถเอาค่ามาหา key กลับได้ ถ้าลองหาดู Structure แบบนี้ที่มีอยู่แล้วก็จะไปเจอของ Apache Common Collection แต่อันนั้นมันอยู่แยกกันระหว่าง BidirectionMap กับ MultiValueMap อ่ะก็เลยต้องหาทางรวมกันซะเอง แล้วก็เจอปัญหาที่ method ด้านล่างนี้แหละ class MultiValueBidirectionHashMap extends MultiValueBidirectionMap { [...]

Read full story Comments { 0 }

ชิ่ง NJUG ไปเดิน Fortune

โอ๊ยเซ็งวันนี้ฝนตกตั้งแต่เช้า – บ่ายเลย เลยไม่ได้ไป NJUG4 จริงๆ ออกช้าด้วยแหละ เพราะเมื่อวานไป Esplanade กว่าจะกลับแล้วทำไรต่ออีก วันนี้ก็เลยตื่นสายซ้า เห้อเลยแทนที่จะไป NJUG4 ก็เลยไปอีกนิดไปลงสถานีพระราม9 แทนเข้า fortune แล้วก็สำรวจอะไรนิดหน่อย สิ่งที่ผมสำรวจก็คือเร้าเตอร์ Asus WL-500G Premium ที่สามารถทำเป็น NAS ได้แต่เดินไปแต่ละร้าน บอกมาเหมือนกันหมดคือ ของหมด แถมมีร้านนึงเข้าไปถามบอกไม่มี เสนอกลับมาเป็น synology NAS แทนแต่ดูราคาแล้วไม่ประทับใจเอาซะเลย 8250 บาท แพงโคตรไม่รวม HDD อีกต่างหาก จบกันงานนี้ (จริงอยากได้ synology มากกว่าเพราะมี php+mysql ด้วย os มันจริงๆเป็น linux เห็นแล้วเป็นอะไรที่น่าสนใจมาก) ถัดจาก NAS ที่ไม่ประสบความสำเร็จเท่าไหร่ก็ไปเดินหาหนังสือต่อ เล่มที่จะหาคือ Head first : Design pattern [...]

Read full story Comments { 0 }

Java6 กับ OSX

วันนี้จะลองเล่นของเล่นใหม่บนจาวา 6 ซะหน่อยแต่ดันไม่มีให้ติดตั้งบนแมคซะงั้น ลองขุดๆ ในเว็บดูก็เจอไปเจอว่ายังไม่ออก แต่ถ้าอยากได้ก็โหลดมาใช้ได้เป็น b88 อยู่(ปัจจุบัน b105 แล้วดูจาก ubuntu) โดยต้องสมัคร ADC และล๊อกอินเข้าไปโหลด วันนี้ก็เลยโหลดทิ้งไว้ก่อน และก็ลองดูทางเลือกอื่น สุดท้ายก็นึกขึ้นได้ว่าเคยโหลดโค้ด JDK6 มานี่นาลองเอามา compile หน่อยดีกว่า ดาวโหลดเสร็จจะได้มาเป็น .jar ใหญ่ๆ 1 ไฟล์เปิดไฟล์ออกมาก็จะเจอหน้าต่างให้ยอมรับเงื่อนไขแล้วก็เลือก directory ที่จะขยายออกมา ความยากมันจะต่อจากนี้แหละ เพราะกว่าจะ compile ได้ต้อง export ตัวแปรไรบางอย่างพอสมควรเลย แล้วบนแมคโปรแกรมที่ใช้ compile บางตัวก็ไม่มีซะนี่ (gawk) ต้องลง macport และติดเพิ่ม บางตัวก็ไม่ได้อยู่ใน bin ต้องสร้าง link จาก /usr/bin มา วันนี้กว่าจะเริ่ม compile ได้ก็เล่นหาวิธีอยู่นานเลย แต่หลังจากทำทุกอย่างตามด้านาบนแล้ว ก็ยังเจอ error อยู่อ่ะ [...]

Read full story Comments { 0 }

HashSet ใน Java

วันนี้เจอบั๊กแปลกๆ ที่ไม่คิดว่าจะเจอได้ในโค้ดงานที่ทำอยู่ สิ่งที่อาจเกิดขึ้นตามมาคือ memory leak ถ้าใช้ไม่ดี และมันก็เกิดกับ hash map ซะด้วย บั๊กที่ว่าคือ การเปลี่ยน hash code ของ object ใน key ของ hash map สิ่งที่เกิดขึ้นเมื่อมีการเปลี่ยนแปลงก็คือ hash map จะไม่สามารถคืน object กลับมาได้หากนำ object นั้นไปใช้อ้างอิง ลองดูจาก code ด้านล่างละกัน import java.util.HashSet; class A { String _data; A(String data) { _data = data; } public int hashCode() { int hash = 0; for(int [...]

Read full story Comments { 0 }