推 forkome:對於經驗不足的我,幫助良多,非常謝謝你用心的回我 10/10 13:16
※ 引述《forkome (丁丁是個人材)》之銘言:
: 種類 子種類 書名
: 第一筆 小說 科幻 丁丁大戰哥吉拉
: 第二筆 小說 科幻 星際大戰丁丁
: 第三筆 小說 愛情 丁丁再愛我一遍
: 第四筆 雜誌 生活 學丁丁減肥
: 第五筆 雜誌 語言 跟丁丁學英文
: 目前小弟想把他放進三維陣列裡來使用
: array[0] = 小說 array[0][0] = 科幻 array[0][0][0] = 丁丁大戰哥吉拉
: array[1] = 雜誌 array[0][1] = 愛情 array[0][1][0] = 丁丁再愛我一遍
: 小弟使用的方式是
: rs1 = select distinct 種類 from book
: while(rs1.next()){
: array[i] = rs1.getString(1)
: ↑把種類放進一維陣列
: rs2 = select distinct 子種類 from book where 種類 = rs1.getString(1)
: while(rs1.next()){
: array[i][j] = rs2.getString(1)
: ↑把子種類放進二維陣列
: rs3 = select * from book where 種類=rs1.getString(1) and 子種類 = rs2.getString(1)
: while(rs3.next()){
: array[i][j][k] = rs3.getString(1)
: ↑把書名放進三維陣列
: }
: }
: }
: 為了將結果放進陣列裡,使用了三個RecordSet,若量大的話
: 會跑的很慢,上面是小弟使用的方式,不知有沒有比較快的方式
: 使用的語言是java,主要是想減少RecordSet的使用
: 還是說~~沒錯,只能那樣用
我應該說我回這篇是在開玩笑,還是我是說認真的呢,(思)
應該一半一半吧......既然都寫了就貼出來了...XDXDXD
其實我是覺得你可以用 "分類;子分類;書名"這樣的字串
然後用TreeSet存 , 這樣也是可以達到用分類子分類排序的效果 ,
要取用的時候用iterator掃一次就可以找到你想要的了...
唯一的缺點大概是同樣的分類/子分類/底下不能有同樣的書名吧,
對於有些書只有版本號不同的時候可能有點不方便。
當然 這還是能改的 ,很多方式就是了...:P
至於底下這個無聊作 看看就好(核爆)
────────────────────────────────
/*懶得做資料庫....用array替代先...*/
String[][] list={
{"小說","科幻","丁丁大戰哥吉拉"},
{"小說","科幻","星際大戰丁丁"} ,
{"小說","愛情","丁丁再愛我一遍"} ,
{"雜誌","生活","丁丁再愛我一遍"} ,
{"雜誌","語言","跟丁丁學英文"}
};
BookList listBook=new BookList();
for(int i=0;i<list.length;i++){
BookObj objBook=new BookObj(list[i][0],list[i][1],list[i][2]);
listBook.addBook(objBook);
}
printBook(listBook.getTypeBook("小說"));
printBook(listBook.getSubTypeBook("小說","科幻"));
────────────────────────────────
static public void printBook(BookObj[] array){
for(int i=0;i<array.length;i++){
System.out.println(array[i].m_strType+":"
+array[i].m_strSubtype+":"+array[i].m_strName);
}
}
────────────────────────────────
class BookObj{
String m_strType;
String m_strSubtype;
String m_strName;
public BookObj(String strType,String strSubtype,String strName){
m_strType=strType;
m_strSubtype=strSubtype;
m_strName =strName;
}
}
/*考慮到可能會有查找分類項目的需求 ,建立一個有分類的結構.*/
class BookList{
private HashMap m_setBook;
BookList(){
m_setBook=new HashMap();
}
boolean addBook(BookObj rBook){
if(!m_setBook.containsKey(rBook.m_strType)){ //分類
m_setBook.put(rBook.m_strType,new HashMap());
}
HashMap setSubType= (HashMap)m_setBook.get(rBook.m_strType);
if(!setSubType.containsKey(rBook.m_strSubtype)){ //子分類
setSubType.put(rBook.m_strSubtype,new ArrayList());
}
ArrayList aryBooks= (ArrayList)setSubType.get(rBook.m_strSubtype);
//aryBooksadd(rBook);
aryBooks.add(rBook);
return true;
}
BookObj getBook(String strBookname){
Iterator irType=m_setBook.values().iterator();
BookObj retBook;
while(irType.hasNext()){
Iterator irSubType= ((HashMap)irType.next()).values().iterator();
while(irSubType.hasNext()){
retBook = findBook((ArrayList)irSubType.next(),strBookname);
if(retBook!=null) return retBook;
}
}
return null;
}
BookObj[] getTypeBook(String strType){
ArrayList listRet=new ArrayList();
if(m_setBook.containsKey(strType)){
Iterator irSubType= ((HashMap)m_setBook.get(strType)).values().iterator();
while(irSubType.hasNext()){
listRet.addAll(((ArrayList)irSubType.next()));
}
}
return transToBook(listRet);
}
BookObj[] getSubTypeBook(String strType,String strSubType){
ArrayList listRet=new ArrayList();
if(m_setBook.containsKey(strType)){
HashMap setSubType=(HashMap)m_setBook.get(strType);
if(setSubType.containsKey(strSubType)){
listRet.addAll((ArrayList)setSubType.get(strSubType));
}
}
return transToBook(listRet);
}
private BookObj[] transToBook(ArrayList listBook)
{
BookObj[] aryBook=new BookObj[listBook.size()];
for(int i=0;i<listBook.size();i++){
aryBook[i]=(BookObj)listBook.get(i);
}
return aryBook;
}
private BookObj findBook(ArrayList listBook,String strBookname){
for(int i=0;i<listBook.size();i++){
BookObj bookTmp=(BookObj)listBook.get(i);
if(bookTmp.m_strName.equals(strBookname)) return bookTmp;
}
return null;
}
BookObj getBook(String strType,String strSubType,String strBookname){
if(!m_setBook.containsKey(strType)) return null; //分類不存在
if(!((HashMap)m_setBook.get(strType)).containsKey(strSubType))
return null; //子分類不存在
ArrayList listSubtypeBook = (ArrayList)
((HashMap)(m_setBook.get(strType))).get(strSubType);
return findBook(listSubtypeBook,strBookname);
}
int size(){
int size=0;
Iterator irType=m_setBook.values().iterator();
while(irType.hasNext()){
Iterator irSubType= ((HashMap)irType.next()).values().iterator();
while(irSubType.hasNext()){
size+= ((ArrayList)irSubType.next()).size();
}
}
return size;
}
}
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 語 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼 *◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂~telnet://tony1223.no-ip.info
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.59.247
※ 編輯: TonyQ 來自: 220.132.59.247 (10/09 17:22)