隨筆-193  評論-715  文章-1  trackbacks-0
          想想自己做JAVA也有好長時間了,在這些日子里,收獲了很多,當(dāng)我還是一名初學(xué)者的時候,走了不少彎路,到現(xiàn)在為止,常常可能還是會走一些彎路。常常我會反思一下自己的過去寫的代碼,覺得很多代碼真的都很垃圾,或者效率也沒有做過考慮,偶爾會發(fā)現(xiàn)很多改進的辦法和一些新的思路,在這里作一些收集,以便于以后的開發(fā)。

          這篇文章會不定期更新,好的點子肯定會收集進來,如果您有什么這方面的好的經(jīng)驗的話,也可以回復(fù)上來,我將會十分感謝您的支持和幫助,大家一起進步嘛。
          由于個人水平有限,文中不免有錯誤之處,還請各位兄弟姐妹們指正,不勝感激!

          1、去掉一個字符串?dāng)?shù)組中的重復(fù)項:(2006.04.11.)
          原來采用的方法:
          ?1?String[]?rid?=?request.getParameterValues("noattRid");
          ?2?//需要用一個臨時的變量把過濾后的結(jié)果這個存起來
          ?3?String[]?ridFiltered?=?new?String[rid.length];
          ?4?????????int?index?=?0;
          ?5?????????for?(int?i?=?0;?i?<?rid.length;?i++)?{
          ?6?????????????if?(!this.isExistString(ridFiltered,?rid[i])&&!rid[i].equals(""))?{
          ?7?????????????????ridFiltered[index++]?=?rid[i];
          ?8?????????????}
          ?9?????????}
          10?
          11?//還需要用一個方法來判斷在結(jié)果中是否存在此項,如下
          12??/**
          13??????*?用于查找某個字符串是否在一個字符串?dāng)?shù)組中
          14??????*?@param?dest?String[]
          15??????*?@param?str?String
          16??????*?return?boolean
          17??????*/
          18?
          19?????public?boolean?isExistString(String[]?dest,?String?str)?{
          20?????????boolean?flag?=?false;
          21?????????for?(int?i?=?0;?i?<?dest.length;?i++)?{
          22?????????????if?(str.equals(dest[i]))?{
          23?????????????????flag?=?true;
          24?????????????}
          25?????????}
          26?????????return?flag;
          27?????}

          看看,要多麻煩有多麻煩,來看看新方法:
          1?String[]?s?=?request.getParameterValues("noattRid");
          2?List?list?=?Arrays.asList(s);
          3?Set?set?=?new?HashSet(list);
          4//rid=(String?[])set.toArray();
          5 String[] temp = new String[set.size()];
          6 Iterator ite = set.iterator();
          7 for (int i = 0; ite.hasNext(); i++) {
          8??? temp[i] = (String) ite.next();
          9 }
          簡簡單單的幾行代碼即可搞定,無論是從程序的可讀性、優(yōu)雅性還是效率方面都有很好的提升。
          擴展:你同時還可以運用上面的方法還判斷三個字符串是否相等(可進一步擴展至多個,但是似乎不太有實際意義),例程如下:
          1?String[]?s?=?{"one",?"two",?"two"};
          2?List?list?=?Arrays.asList(s);
          3?Set?set?=?new?HashSet(list);
          4?System.out.println(list.size()?==?set.size());?//?false

          posted on 2006-04-11 18:08 Robin's Programming World 閱讀(3369) 評論(9)  編輯  收藏 所屬分類: Java

          評論:
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-12 13:48 | edouglas
          呵呵,有些啟發(fā),謝謝作者的心得:)  回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-12 14:00 | junglesong
          原來是用類庫代替算法.

          通常做法應(yīng)該是插入排序后的數(shù)組吧,加上二分查找.  回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-12 15:41 | yukai zhao
          thanks,
          剛開始學(xué)習(xí)java  回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-12 18:22 | Robin's Java World
          不客氣,大家共同進步!  回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-13 09:19 | zhyiwww
          不錯,有創(chuàng)意,學(xué)習(xí)中…………  回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-13 15:43 | scorpional
          1 String[] s = request.getParameterValues("noattRid");
          2 List list = Arrays.asList(s);
          3 Set set = new HashSet(list);
          //4 rid=(String [])set.toArray();
          這個轉(zhuǎn)換你沒有問題么,我試了一下,這個set.toArray()就報錯,ClassCastException
            回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-14 17:40 | oliver456
          //4 rid=(String [])set.toArray();
          this is source code from AbstractCollection class
          public Object[] toArray() {
          Object[] result = new Object[size()];
          Iterator<E> e = iterator();
          for (int i=0; e.hasNext(); i++)
          result[i] = e.next();
          return result;
          }
          so we can convert directly
          if you are using jdk 1.5
          you can improve above code like this

          String[] s = request.getParameterValues("noattRid");
          List<String> list = Arrays.asList(s);
          Set <String>set = new HashSet<String>(list);
          String[] rid =set.toArray(new String[0]);
            回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2006-04-15 11:48 | scorpional
          恩,現(xiàn)在可以了  回復(fù)  更多評論
            
          # re: JAVA開發(fā)經(jīng)驗及小技巧(不定期更新) 2007-07-16 14:09 | paul
          set中不允許有重復(fù)對象的運用  回復(fù)  更多評論
            
          主站蜘蛛池模板: 胶南市| 马尔康县| 花莲县| 临澧县| 陇川县| 汪清县| 禹城市| 秀山| 牟定县| 西乌珠穆沁旗| 吉林省| 铜梁县| 长寿区| 大姚县| 扎兰屯市| 肇源县| 林甸县| 青田县| 海盐县| 闸北区| 屯留县| 正定县| 顺义区| 射洪县| 沈丘县| 阿拉善右旗| 东辽县| 华阴市| 天长市| 宽城| 枣庄市| 大港区| 昌邑市| 浪卡子县| 烟台市| 沙坪坝区| 康乐县| 锡林浩特市| 夹江县| 广汉市| 西昌市|