求大神解答下这道题 谢谢了

求大神解答下这道题谢谢了实现一个排序方法,能对任意单一类型数组排序,比如Integer[],String[],long[]或者其他任意类型的数组,代码不做限制随意发挥。(... 求大神解答下这道题 谢谢了实现一个排序方法,能对任意单一类型数组排序,比如Integer[],String[],long[]或者其他任意类型的数组,代码不做限制随意发挥。(请以代码实现,谢绝直接调用函数方法,用循环语句实现 展开
 我来答
夜破晓0
2017-04-18 · 超过15用户采纳过TA的回答
知道答主
回答量:23
采纳率:0%
帮助的人:26.7万
展开全部
  /**
  * 1、初始化一个数组。
  */
  
  Integer[] integers = new Integer[] { 3, 4, 2, 884, -1, 43, 45, 2
  3, 54, 14, 54, 78 };

  /**
  * 2、将数组转成 List 类型作为参数传入 treeSet 的构造器。
  */
  
  TreeSet set = new TreeSet(Arrays.asList(integers));

  /**
  * 3、TreeSet 按照数组类型的自然排序进行排序(也可以自定义比较器之后把数组的元素 add 到 set 集合进行排序)
  */
  for (Iterator iterator = set.iterator(); iterator.hasNext();) {
  
      System.out.println(iterator.next());
      
  }
  
      System.out.println("缺点是数组的重复元素会被过滤");
追问
非常谢谢 但是好像不行 因为要求是不能调用函数方法的
追答
  /**
  * 1、初始化一个数组。
  */
  
  Integer[] integers = new Integer[] { 3, 4, 2, 884, -1, 43, 45, 23, 54, 14, 54, 78 };

  /**
  * 2、冒泡排序
  */
  for (int i = 0; i < integers.length; i++) {

      for (int j = i + 1; j < integers.length; j++) {
          /**
          * 注意这里可以调用 compartTo 方法是因为 Integer 这个类实现了 Comparable 这个接口。
          * 
          * 如果满足题目中的任意类型数组,比如 User 对象数组,User 这个类必须实现 Comparable 接口。
          * 
          */
          
          if (integers[i].compareTo(integers[j]) > 0) {
              int temp = integers[i];
              integers[i] = integers[j];
              integers[j] = temp;
          }
        }
  }

User对象实现 Comparable 示例:

class User implements Comparable<Object> {

    private int age;

    public User(int age) {
        this.age = age;
    }

    @Override
    public int compareTo(Object o) {
        return this.age - ((User) o).age;
    }
}

我理解只要是没有调用JDK提供的数组或集合排序方法就可以了,其实还有其他非 for 循环的方式。建议查看 TreeMap 的源码实现方式或者参照 LinkedList 的双向列表数据结构,写一个支持比较器的容器也很不错。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式