2017年12月3日 星期日

關於Java queue類說明


Java5中的queue類是隊伍數據結構管理類,
在它裡面的元素可以按照添加他們的相同順序被移除。
使用方法
offer 添加一個元素並返回 如果隊伍已滿,則返回false
poll 移除並返回隊伍頭部的元素 如果隊伍為空,則返回null
peek 返回隊伍頭部元素 如果隊伍為空,則返回null
put 添加一個元素 如果隊伍滿,則阻塞
take 移除並返回隊伍頭部的元素 如果隊伍為空,則阻塞
element 返回隊伍頭部的元素 如果隊伍為空,則拋出一個NoSuchElementException
add 增加一個元素 如果隊伍已滿,則拋出一個IegaISalbEePeplian
remove 移除並返回隊伍頭部的元素 如果隊伍為空,則拋出一個NoSuchElementException



方法\處理方法 拋出異常 返回特殊值 一直阻塞 超時退出
插入方法 add(e) offer(e) put(e) offer(e,time,unit)
移除方法 remove() poll() take() poll(time,unit)
檢查方法 element() peek() 不可用 不可用

但poll和peek方法出錯會返回null,因此向隊伍插入null是不合法的行為。

還有帶超時的 offer和poll方法重載,例如下面的呼叫

boolean result=q.offer(value,100,TimeUnit.MILLISECONDS)

嘗試在100毫秒內向隊伍尾部插入一個元素,如果成功返回true,但當超時進入時會返回false,同樣地,呼叫

Object head=q.pll(100,TimeUnit.MILLSECONDS)

如果在100毫秒內成功地移除了隊伍頭元素,則立即返回頭部元素,否則到達超時,返回null。

阻塞的操作有put和take,put方法是隊伍滿時阻塞,take方法是隊伍空時阻塞。

(阻塞的意思就是此條線程會處於等待卡死狀態,解鎖的條件是隊列中有另一條線程存入或取出數據了,就會解鎖,說白了就是滿了不能再存,空了不能取,都得等著,就相當於隊列是倉庫,倉庫沒有貨了就生產,倉庫有貨就能消費,鎖條件是notFull和notEmpty)

Queue接口和List、Set同一級別,都是繼承Collection 接口,LinkedList實現Queue介面,Queue介面窄化了對LinkedList的方法訪問權限(即是方法中的參數類型是Queue時,就完全只能訪問Queue接口所定義的方法了,而不能直接訪問LinkedList的非Queue方法

JDK7提供了7个阻塞队列。分别是
  • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
  • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
  • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列。
  • SynchronousQueue:一个不存储元素的阻塞队列。
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
  • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
參考網站,如有不妥,請告知,立即刪除
http://www.infoq.com/cn/articles/java-blocking-queue
https://zhidao.baidu.com/question/541161936.html
http://www.itread01.com/content/1501578122.html

2017年10月23日 星期一

Word 數字 數值加上千分位和金錢符號$

在某ㄧ次的機遇,我需要把整份Word數值改成有千分位並開頭加上$符號

上網查了一下,幾乎都說要插入Excel,但其實使用Word替代和正規表示法就可以解決了



例如Word有下列ㄧ串數字,則就使用右方格式做轉換

76543210  =>尋找目標([0-9]{2})([0-9]{3})([0-9]{3})   取代為$\1,\2,\3

6543210    =>尋找目標([0-9]{1})([0-9]{3})([0-9]{3})   取代為$\1,\2,\3

543210      =>尋找目標([0-9]{3})([0-9]{3})   取代為$\1,\2

43210       =>尋找目標([0-9]{2})([0-9]{3})   取代為$\1,\2

3210         =>尋找目標([0-9]{1})([0-9]{3})   取代為$\1,\2

210          =>尋找目標([!,$])([0-9]{3})  取代為\1$\2

10       

0         

如果要使用的話,請從上至下開始取代,然後數值為百位數時最好自己手動輸入,因為容易因為其他項目符號,或者是不需要當作金錢的數值,ㄧ起取代掉

2017年7月12日 星期三

Java 對於視窗事件處理流程

有沒有想過,當使用者按下按鈕時,是如何觸發回應視窗,或者是其他動作呢?

一開始我們先記得,在事件處理的過程中,涉及主要下面內容:

1. Event Source(事件源)(Object):事件發生的場所,通常是各個元件,例如按鈕、視窗、選單...等。

2.Event(事件)(Object):當我們對某個元件,做出一些動作時,他會封裝所做的動作相關資訊。

3.Event Listener(事件監聽器)(Object):當有事件源發生事件時(監聽),會對各種事件派送給事件處理器來做相關處理及回應。

4.Event Handler(事件處理器)(Function):當事件監聽器將事件派遣給事件處理器,他會做一連串的回應動作。






















參考:細說Java 8 異常處理與圖形介面程式設計 一書

2017年7月6日 星期四

正規表達式(Regular Expression, regex) for Java


--------------------------------------------------------------------------------------------------------------------------
普通字元組

[0-9], \d    =>比對數字串
[a-z]    =>比對小寫英文字母串
[0-9A-Za-z], \w=>比對數字串大小寫英文字母串

-g         =>(global) 全域比對,如果沒家只會比對第一個
-i          =>(ignore case) 大小寫不區分
-m        =>(mulltiline) 多行比對

[...]      =>代表那些括號內的字元
[^...]    =>代表不要那些括號內的字元

+         =>代表出現1次以上
*         =>代表出現0次以上
?         =>代表出現0次或1次

\n       =>換行(newLine, ASCII=0x0a)
\t        =>跳格(tab)
\r        =>windows中常接著\n一起代表換行(ASCII=0x0c)
\s       =>空白型字元
\b       =>匹配邊界
.         =>代表任何字母(換行除外)
^        =>不在[...]裡面時,代表字串手
$        =>代表字串結尾

(預設)Greedy   =>貪婪模式會一直匹配下去,直到無法匹配為止
(?)Reluctant      =>勉強模式,只會匹配最少字元。
(+)Possessive    =>只有Java

\X代表不是\x的那些字母
(...)    =>代表一個群組

*可以看這個網頁,補充很多知識
https://atedev.wordpress.com/2007/11/23/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F-regular-expression/
--------------------------------------------------------------------------------------------------------------------------

POSIX字元組

e.gs., test1檔案,可以更改1或a來看一下執行結果


--------------------------------------------------------------------------------------------------------------------------



利用Java來練習

e.gs.,
(1).
可以觀看test2檔案執行結果
inputStr="abdZZcdeQQbe";
需找出c或d所在的位置。
regex="[c-d]{1}";
而如果要連續重複兩次的話,則
regex="[c-d]{2}";
matcher的start=5,group=cd;

(2).
可以觀看test3檔案執行結果
來看一下+,*,? 和貪婪模式、勉強模式的差別。


(3).
可以觀看test4檔案執行結果
來看一下group的執行結果,其中他會依序尋找其結果

(4)
可以觀看test5檔案執行結果
用一個簡單的例子,試著抓出他的電話號碼

(5)
可以觀看test6檔案執行結果
找出每個句首大寫的單字

(6)
可以觀看test7檔案執行結果
可以利用此程式,知道該號碼為手機、家裡電話、或錯誤號碼

*
http://notes.maxwi.com/2015/10/06/Regex-practice/
* 如果想看更多範例可以到下面網址
http://www.iteye.com/topic/350789