随笔-193  评论-715  文章-1  trackbacks-0
想想自己做JAVA也有好长时间了,在这些日子里,收获了很多,当我还是一名初学者的时候,走了不少弯路,到现在为止,常常可能还是会走一些弯路。常常我会反思一下自己的过去写的代码,觉得很多代码真的都很垃圾,或者效率也没有做过考虑,偶尔会发现很多改进的办法和一些新的思路,在这里作一些收集,以便于以后的开发。

这篇文章会不定期更新,好的点子肯定会收集进来,如果您有什么这方面的好的经验的话,也可以回复上来,我将会十分感谢您的支持和帮助,大家一起进步嘛。
由于个人水平有限,文中不免有错误之处,还请各位兄弟姐妹们指正,不胜感激!

1、去掉一个字符串数组中的重复项:(2006.04.11.)
原来采用的方法:
 1 String[] rid = request.getParameterValues("noattRid");
 2 //需要用一个临时的变量把过滤后的结果这个存起来
 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 //还需要用一个方法来判断在结果中是否存在此项,如下
12  /**
13      * 用于查找某个字符串是否在一个字符串数组中
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 }
简简单单的几行代码即可搞定,无论是从程序的可读性、优雅性还是效率方面都有很好的提升。
扩展:你同时还可以运用上面的方法还判断三个字符串是否相等(可进一步扩展至多个,但是似乎不太有实际意义),例程如下:
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 阅读(3347) 评论(9)  编辑  收藏 所属分类: Java

评论:
# re: JAVA开发经验及小技巧(不定期更新) 2006-04-12 13:48 | edouglas
呵呵,有些启发,谢谢作者的心得:)  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 2006-04-12 14:00 | junglesong
原来是用类库代替算法.

通常做法应该是插入排序后的数组吧,加上二分查找.  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 2006-04-12 15:41 | yukai zhao
thanks,
刚开始学习java  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 2006-04-12 18:22 | Robin's Java World
不客气,大家共同进步!  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 2006-04-13 09:19 | zhyiwww
不错,有创意,学习中…………  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 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();
这个转换你没有问题么,我试了一下,这个set.toArray()就报错,ClassCastException
  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 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]);
  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 2006-04-15 11:48 | scorpional
恩,现在可以了  回复  更多评论
  
# re: JAVA开发经验及小技巧(不定期更新) 2007-07-16 14:09 | paul
set中不允许有重复对象的运用  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: