用作key放进哈希表,再把哈希表的所有key取出来

解决方案 »

  1.   

    vgvg(天下风云出我辈) 
    楼主的组合有规律吗?先英文,后中文。先字数少的,后字数多的。依次排列。
      

  2.   

    用TreeSet很容易就搞定,而且效率高
      

  3.   

    treeroot(天才--天天被人踩,人才--人人都想踩) 
    我不喜欢你种人!什么都好容易呀!
    那你就应该指点一下啊??!!
      

  4.   

    import java.util.*;
    class TreeSetDemo 
    {
    public static void main(String[] args) 
    {
    String[] arr_a={"物质","我","或","也是","你好吗","真理","我"};
    String[] arr_b={"但","sentence","syntax","你好吗"};
    String[] arr_c={"我","物质","可是","真理"};

    Set treeSet=new TreeSet(new Comparator(){
    public int compare(Object o1,Object o2){
    //必须是String
    String s1=(String)o1;
    String s2=(String)o2;
    //如果第一个字符是字母,就认为是英文
    //这里和256比较似乎不是很合理,但是用 Character.isLetter()又不对!对中文也返回true?
    if(s1.length()==0) return -1;
    if(s2.length()==0) return 1; char c1=s1.charAt(0);
    char c2=s2.charAt(0);
                    
    if(c1<256){
    if(c2<256){
    //都是英文,按字典排序
    return s1.compareTo(s2);
    }
    else{
    //英文一定在前,返回负数
    return -1;
    }
    }
    else{
    if(c2<256){
    //中文在后,返回正数
    return 1;
    }
    else{
    //都是中文,比较长度
    int i=s1.length()-s2.length();
    //下面一定要注意,不能直接返回 i,思考一下吧!
    if(i!=0) return i;
    return s1.compareTo(s2);
    }
    }
    }
    });

    treeSet.addAll(Arrays.asList(arr_a));
    treeSet.addAll(Arrays.asList(arr_b));
    treeSet.addAll(Arrays.asList(arr_c));

    String[] arr_d=(String[])treeSet.toArray(new String[0]);

    for(int i=0;i<arr_d.length;i++)
    System.out.println(arr_d[i]);
    }
    }
      

  5.   

    to yulchina(为啥我的可用分总是那么少?) 我不是正在写吗?而且还有调式一下,要不少一个标点别人都会挑剔!
      

  6.   

    写了一个比较类,用法:首先将楼主的3个结果集全部加入到一个ArrayList中,然后
    StrComparator comp = new StrComparator();
    Collections.sort(alist, comp);
    即可public class StrComparator implements Comparator {
    public int compare(Object element1, Object element2) {
            //将字符串转化为字符数组
    char[] buffer1 = ((String)element1).toCharArray();
    char[] buffer2 = ((String)element2).toCharArray();
    //取第一个字符
    int c1 = (int) buffer1[0];
            String u1 = Integer.toHexString(c1);
            int c2 = (int) buffer2[0];
            String u2 = Integer.toHexString(c2);
            
            if (u1.length() <= 2) {//element1是ascii字符
             if (u2.length() <= 2) {//element2也是ascii字符
             return ((String)element1).compareTo(element2);
             }
             else {             //element2是中文
             return -1;
             }
            }
            else {                 //element1是中文
             if (u2.length() <= 2) {//element2是ascii字符
             return 1;
             }
             else {             //element2也是中文
             String str1 = (String) element1;
             String str2 = (String) element2;
             int length1 = str1.length();
             int length2 = str2.length();         return length1 - length2;
             }
            }
     }
    }
      

  7.   

    to hxzg001(大家踊跃结贴啊) 
    你的程序的三点不足:
    1.没有有效的去掉重复的数据
    2.Compratator实现的不足,因为如果是两个中文的话,如果长度相同你就认为相同
      这显然是不符合逻辑的
    3.排序的效率不高,对ArrayList的排序的复杂度是o(n*n)
      

  8.   

    to treeroot(天才--天天被人踩,人才--人人都想踩) 多谢提醒,
    第一点我确实没有注意,不过也好改,只要将3个结果集改为加入到一个HashMap中,然后对这个HashMap进行Collections.sort就可以了;
    第二点楼主除了长度好像没有别的要求吧,你看结果集D中中文的排列出了长度没有别的阿;
    第三点没怎么研究,不过如果如第一点所述改为对HashMap进行排序的话效率应有所提高吧,treeroot可以提供一些这方面的资料吗?
      

  9.   

    晕!HashMap是不可以排序,确实可以过滤重复的数据,不过逻辑上也应该用HashSet
    TreeSet用的是红黑树算法,其实就是一个二叉树,本身就是有续的
    做到了既过滤重复数据,同时又排好了续,而且效率又高,可以说是一举三得。当然照你那样也可以实现
    1.先用HashSet
    2.转换成List再排序
      

  10.   

    晕,今天老出错,呵呵
    写了一个Comparator却不会用了
      

  11.   

    up 
    treeroot(天才--天天被人踩,人才--人人都想踩) 给个QQ 或者 MSN OK 我的MSN是[email protected] 有志同道合的和可以加我
      

  12.   

    我觉得可以先分成两个list:英文一个,中文一个
    然后先按字符串.length输出英文list
    然后再按字符.length输出中文list
      

  13.   

    意,我怎么发觉按你的那个排序规律不能输出你的那个结果集!
    规律:
    先英文,后中文。先字数少的,后字数多的。依次排列。
    你的答案:
    sentence  syntax 我 但  或 物质 也是 可是  真理 你好吗
    真确的应该是:
    <font color="#ff0000">syntax sentence</font> 我 但  或 物质 也是 可是  真理 你好吗
      

  14.   

    treeroot(天才--天天被人踩,人才--人人都想踩) 
    你的方法很好的。不知有没有其他方法?
      

  15.   

    treeroot(天才--天天被人踩,人才--人人都想踩) ( ) 
    好吧  结帐