A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙天 黑马帝   /  2012-4-23 20:57  /  2548 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我把字符串存到arraylist里面,遍历后再用treeset存进去保证唯一性,为什么得不出结果
public class d7 {

        public static void main(String[] args) {
                String str="fgdfgfgh";
                sys(str);
        }

        private static <E> void sys(String str) {
                char[] chs=str.toCharArray();
                ArrayList<Character> list=new ArrayList<Character>();
                TreeSet<Object> temp=new TreeSet<Object>(new ComparatorByObject());
                for(int x=0;x<chs.length;x++){
                        list.add(chs[x]);
                }
                char[] chr={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
                for(int x=0;x<chr.length;x++){
                        Object obj=chr[x];
                        int count=0;
                        while(list.contains(obj)){
                                count++;
                                list.remove(obj);
                                temp.add(obj);
                        }
                        Iterator<Object> it=temp.iterator();
                                while(it.hasNext()){
                                        System.out.print(it.next()+":"+count+".");
                                }
                }
        }
}

class ComparatorByObject implements Comparator<Object>{
        Object o1;
        Object o2;
        public int compare(Object o1,Object o2){
               
        int temp=(o1.toString()).compareTo(o2.toString());
        return temp;
}
}

4 个回复

倒序浏览
  1. import java.util.*;
  2. class UniArraylist {

  3.         public static void main(String[] args) {
  4.                 String str="fgdfgfgh";
  5.                 sys(str);
  6.         }

  7.         private static <E> void sys(String str) {
  8.                 char[] chs=str.toCharArray();
  9.                 System.out.println(chs);
  10.                 ArrayList<Character> list1=new ArrayList<Character>();
  11.                 TreeSet<Object> temp=new TreeSet<Object>(new ComparatorByObject());
  12.                 for(int x=0;x<chs.length;x++){
  13.                                 if(!list1.contains(chs[x]))
  14.                                 {
  15.                                           list1.add(chs[x]);
  16.                                           
  17.                                           temp.add(chs[x]);
  18.                                           System.out.println(temp);
  19.                                 }  
  20.                 }
  21.                Iterator<Object> it=temp.iterator();
  22.                while(it.hasNext()){
  23.                    System.out.print(it.next());
  24.                                        
  25.                }
  26.                 System.out.println();                  
  27.                 /*
  28.                 char[] chr={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  29.                 for(int x=0;x<chr.length;x++){
  30.                         Object obj=chr[x];
  31.                         int count=0;
  32.                         while(list.contains(obj)){
  33.                                 count++;
  34.                                 list.remove(obj);
  35.                                 temp.add(obj);
  36.                         }
  37.                         Iterator<Object> it=temp.iterator();
  38.                                 while(it.hasNext()){
  39.                                         System.out.println(it.next()+":"+count+".");
  40.                                 }
  41.                 }

  42.                 */
  43.         }
  44. }

  45. class ComparatorByObject implements Comparator<Object>{
  46.         Object o1;
  47.         Object o2;
  48.         public int compare(Object o1,Object o2){
  49.                
  50.         int temp=(o1.toString()).compareTo(o2.toString());
  51.         return temp;
  52. }
  53. }
复制代码
回复 使用道具 举报
本帖最后由 袁冬梅 于 2012-4-24 00:24 编辑

悲剧的网速。。。
上面的是我这边改的。
另外,你还可以把你代码的set的迭代器拿出for循环来,在打印就是你的set里面的内容了,还有,count这个计数器要用来做什么?每一次for循环他都会被清0,根本没做到计数的效果。如果要想弄计数效果,我觉得可能用map会比较好。↖(^ω^)↗,希望能帮到你。
回复 使用道具 举报
第一个问题,for循环内的while改成if,因为如果(list.contains(obj))一次为真,这个while就一直循环下去了。
第二个问题,treeset的遍历应该放到for循环外面
这样2点改掉就得到了dfgh
还有一点,treeset有自动排序的,比如数字按升序,字母从a到z,如果不需要改变原来的顺序,那个比较类就不需要了
回复 使用道具 举报
那个count是不是统计每个字母出现的次数?这样的话把字符串放到treemap里面更好,value直接就是每个字母出现的次数,开始为0,出现一次+1,实现起来比较简单。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马