求大神解答下这道题 谢谢了
求大神解答下这道题谢谢了实现一个排序方法,能对任意单一类型数组排序,比如Integer[],String[],long[]或者其他任意类型的数组,代码不做限制随意发挥。(...
求大神解答下这道题 谢谢了实现一个排序方法,能对任意单一类型数组排序,比如Integer[],String[],long[]或者其他任意类型的数组,代码不做限制随意发挥。(请以代码实现,谢绝直接调用函数方法,用循环语句实现
展开
1个回答
展开全部
/**
* 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 的双向列表数据结构,写一个支持比较器的容器也很不错。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询