August 19, 2012

Queue Interface

Queue ဆိုသည်မှာ Collection တစ်မျိုးဖြစ်ပြီး၊ ပါဝင်သော Element များအတွင်းမှ မည်သည့် Element အား ဦးစားပေး အသုံးပြုမည်ဆိုသည်ကို ရွေးချယ် သတ်မှတ်နိုင်ပါသည်။ Collection တွင်ပါဝင်သော လုပ်ဆောင်မှု့များ အပြင် Queue တွင် ပါဝင်သော Element များအပေါ်၊ သွင်းခြင်း၊ ထုတ်ခြင်း နှင့် စစ်ဆေးခြင်း အစရှိသည့် လုပ်ဆောင်ချက်များကို ဖြည့်စွက်ထားပါသည်။

Queue.java
public interface Queue<E> extends Collection<E> {
    E element();
    boolean offer(E e);
    E peek();
    E poll();
    E remove();
}
Queue ၏ လုပ်ဆောင်ချက်များသည် များသောအား ဖြင့် ပုံစံ ၂ခု ပံ့ပိုးထားသည်က များ၏။
  1. လုပ်ဆောင်ချက်အား လုပ်ဆောင်၍ မအောင်မြင်သော အခါ Exception အား Throw လုပ်သည့် ပုံစံ။
  2.  လုပ်ဆောင်ချက်အား လုပ်ဆောင်၍ မအောင်မြင်သော အခါသတ်မှတ်ထားသော တန်ဖိုးတစ်ခုအား (null, false ဒါမှမဟုတ် တစ်ခုခု) return ပြန်လုပ်သည့် ပုံစံ
Queue Interface Structure
Type of Operation Throws exception Returns special value
Insert add(e) offer(e)
Remove remove() poll()
Examine element() peek()

Queue များသည် များသောအားဖြင့် ၎င်း၏ Element များအား FIFO (First-In-First-Out) စီနည်းကို အသုံးပြု၍ စီစဉ်ထား၏။ သို့ရာတွင် Priority Queue ကဲ့သို့ အချို့သော Queue များမှာမူ၊ Element ရဲ့ တန်ဖိုးအပေါ်မှုတည်ပြီး Order လုပ်လေ့ရှိ၏။ သို့ရာတွင် မည်သည့် Queue မဆို ၎င်းတို့၏ Element များ၏ ဦးတည်ရာသည် Queue#remove နှင့် Queue#pull အား ခေါ်ဆိုမည့် ဘက်သို့ ဦးတည်ထားကြပါသည်။ FIFO Queue တစ်ခုမှာတော့ အသစ် Insert လုပ်သည့် Element များအား Order ၏ နောက်ဆုံးတွင် ဖြည့်စွက်ပါသည်။ အခြားသော Queue များဆိုပါက ၎င်းတို့ ကိုယ်ပိုင် သတ်မှတ်ချက် နည်းလမ်းများဖြင့် နေရာချထား လေ့ရှိ၏။ ထို့ကြောင့် Queue Implementations များဟာ Ordering Properties များအပေါ်မှုတည်၍ ကန့်သန့် ရေးသားသင့် ပေသည်။

တဖန် Implementation များတွင် ပါဝင်သော Element အရေအတွက်အား ကန့်သတ်နိုင်ပါသေးသည်။ ဤကဲ့သို့ ကန့်သတ်ထားသော Queue များအား Bounded ဟု ခေါ်ဆိုလေ့ရှိ၏။ java.concurrent Package အောက်တွင် ပါဝင်သော Queue များမှာ Bounded များဖြစ်ကြပြီး၊ java.util Package အောက်ရှိ Queue Implementation များမှာ Bounded များ မဟုတ်ကြပါ။

Collection Interface မှ အမွေးဆက်ခံထားသော add လုပ်ဆောင်ကို အသုံးပြု၍ Queue ၏ အရေအတွက် ကန့်သတ်ချက် ကျော်လွန်၍ Element များအား Insert လုပ်ပါက IllegalStatteException အား Throw လုပ်မည်ဖြစ်သည်။ အကယ်၍ အဆိုပါ အနေအထားမျိုးတွင် Queue#offer အား အသုံးပြုပါက Insert လုပ်၍မရကြောင်း false အား return လုပ်ခြင်း ဖြင့် အသိပေးမည် ဖြစ်ပါသည်။

Queue#remove နှင့် poll သည်လည်း Collection အတွင်းရှင် ဦးဆုံး Element အား ဖျက်ထုတ်ပြစ်ပြီး၊ ၎င်းအား return လုပ်မည် ဖြစ်သည်။ ကွာခြားသည်မှာ Collection အတွင်း Element က မရှိတော့သော အခါ ဖြစ်သည်။ ထိုအခါမျိုးတွင် remove အား ခေါ်ဆိုပါက NoSuchElementException အား throw လုပ်မည် ဖြစ်ပြီး၊ poll အား ခေါ်ဆိုပါက null အား return လုပ်မည် ဖြစ်ပါသည်။

Queue#element နှင့် peekသည်လည်း Headနေရာတွင်ရှိသော Element အား ပြန်ပေးမည် ဖြစ်သော်လည်း ဖျက်ထုတ်ပြစ်ခြင်း မရှိပါ။ Collection အတွင်း Elementမရှိသောအခါ element သည် NoSuchElementException အား throw လုပ်မည် ဖြစ်ပြီး၊ peek အား ခေါ်ဆိုပါက null အား return လုပ်မည် ဖြစ်ပါသည်။

များသောအားဖြင့် Queue များသည် Null အား add လုပ်၍မရပေ။ သို့ရာတွင် ခြွင်းချက်အနေဖြင့် LinkedList Implementation များသည် Null အား add လုပ်၍ရပါသည်။ poll နှင့် peek များသည် null အား အဓိပ္ပါယ်တစ်မျိုး အနေဖြင့်အသုံးပြု နေပါသဖြင့် ဤထူးခြားချက်အား အသုံးမပြုသင့်ပေ။


General Purpose Implementations

  • LinkedList
    LinkedList သည် Queue အင်တာဖေစ်အား Implement လုပ်ထားသော General Purpose Implementation Class တစ်မျိုးဖြစ်ပြီး၊ FIFO (First-In-First-Out) Queue Ordering အား အသုံးပြုထား၏။
  • PriorityQueue
    PriorityQueue သည် Heap Data Structure ပုံစံအား အသုံးပြုထားသော Queue ရဲ့ General Purpose Implementation တစ်မျိုးဖြစ်၏။ Heap Data Structure ဆိုသည်မှာ Tree Data Structure ပုံစံရှိပြီး၊ Parent Node ဟာ Child Node ထက် တူရင်တူ၊ မတူရင်ပို၍ ကြီးရမည် ဟူသော သတ်မှတ်ချက်ရှိပါသည်။
Queue ရဲ့ သဘောသဘာဝအား တည်းခေါက်မိစေရန် Count Down လုပ်သည့် နမှုနာ ပရိုဂရမ်တစ်ခုကို ရေးကြည့်ပါမည်။ ပရိုဂရမ်မှ Argument အနေဖြင့် Count Down လုပ်မည့် ကိန်းတစ်ခုကို ရယူပြီး၊ အဲ့ဒီကိန်းမှစကာ နောက်ဆုံး သုညဖြစ်သည် အထိ FIFO Queue ထဲသို့ ထည့်သိမ်းထားပါမည်။ ပြီးပါက တစ်စက္ကန့် တစ်ခါ Queue ထဲမှ ထုတ်ပြီး ရေတွက်သွားပါမည်။

CountDown.java
import java.util.LinkedList;
import java.util.Queue;

public class CountDown {

 public static void main(String[] args) throws InterruptedException {
  if(args.length < 1)
   System.err.println("Please set the time to count!");

  Queue<Integer> que = new LinkedList<>();
  for(int i=Integer.parseInt(args[0]); i > 0; i--)
   que.offer(i);
  
  while(!que.isEmpty()) {
   System.out.println(que.poll());
   Thread.sleep(1000);
  }
 }

}
ကွန်ပိုင်းလုပ်၍ အလုပ်ခိုင်းကြည့်သော အခါ အောက်ပါအတိုင်း အလုပ်လုပ်နိုင်သည်ကို တွေ့ရပါမည်။


ဆက်ပါဦးမည်။ လေးစားစွာဖြင့်။
မင်းလွင်

18 comments:

  1. Hey, I think your blog might be having browser compatibility issues.
    When I look at your website in Ie, it looks fine but when opening in Internet Explorer,
    it has some overlapping. I just wanted to give you a quick heads up!
    Other then that, wonderful blog!

    ReplyDelete
  2. Excellent write-up. I absolutely love this site.
    Keep it up!

    ReplyDelete
  3. My brother suggested I might like this blog. He was totally right.
    This post truly made my day. You can not imagine
    just how much time I had spent for this info! Thanks!

    ReplyDelete
  4. Hello colleagues, its fantastic article on the topic of
    educationand fully explained, keep it up all the time.

    ReplyDelete
  5. Very rapidly this web site will be famous amid all blog
    users, due to it's nice articles

    ReplyDelete
  6. Hello! This is my first visit to your blog! We are a group
    of volunteers and starting a new initiative in a community in the same niche.
    Your blog provided us useful information to work on. You have done a extraordinary
    job!

    ReplyDelete
  7. Thank you for the auspicious writeup. It in fact was a amusement account
    it. Look advanced to more added agreeable from you! However, how can we communicate?

    ReplyDelete
  8. After looking into a few of the articles on your web site, I seriously like your way of
    blogging. I saved as a favorite it to my bookmark website list and will be checking back in the near future.
    Please check out my website as well and tell
    me your opinion.

    ReplyDelete
  9. I don't even know how I ended up here, but I thought this post was great.
    I do not know who you are but definitely you are going to a famous
    blogger if you aren't already ;) Cheers!

    ReplyDelete
  10. Hi there I am so delighted I found your weblog, I
    really found you by error, while I was browsing on Google for something else, Anyways I am here now and would just like to say cheers for a fantastic post and
    a all round exciting blog (I also love the theme/design),
    I don’t have time to read through it all at the minute but
    I have saved it and also included your RSS feeds, so when I have time I
    will be back to read a lot more, Please do keep up
    the excellent jo.

    ReplyDelete
  11. This excellent website certainly has all the information I wanted concerning this subject and didn't know
    who to ask.

    ReplyDelete
  12. If some one wants expert view about blogging then i suggest him/her to go to
    see this blog, Keep up the nice job.

    ReplyDelete
  13. Hello! Would you mind if I share your blog with my myspace group?
    There's a lot of folks that I think would really appreciate your content.
    Please let me know. Cheers

    ReplyDelete
  14. Hello! This is my 1st comment here so I just wanted to give
    a quick shout out and say I genuinely enjoy reading your posts.
    Can you recommend any other blogs/websites/forums that go over
    the same topics? Appreciate it!

    ReplyDelete
  15. With havin so much content and articles do you ever run into any problems
    of plagorism or copyright violation? My website has a lot of unique content I've either authored
    myself or outsourced but it seems a lot of it is popping it up
    all over the internet without my authorization. Do you know any methods to help
    prevent content from being ripped off? I'd definitely appreciate it.

    ReplyDelete
  16. I constantly emailed this website post page to all my associates, for the reason that if like
    to read it after that my contacts will too.

    ReplyDelete
  17. You could definitely see your expertise within the work you write.
    The sector hopes for even more passionate writers like you who aren't afraid to say how they
    believe. Always go after your heart.

    ReplyDelete
  18. Nice blog here! Also your website loads up very fast!

    What host are you using? Can I get your affiliate link to your host?
    I wish my site loaded up as quickly as yours lol

    ReplyDelete