·java根据数组的自然顺序对基本数据类型和String类型的泛型数组(数组也可以,不过这里只介绍泛型数组)有很好的排序功能,如下添加4条字符串,然后通过对泛型数组列表进行相应的操作,分别按照升序和降序输出:
import java.util.ArrayList;
import java.util.Collections;
public class Sort {
public static void main(String args[]) {
ArrayList<String> array = new ArrayList<String>();
array.add("ccccc");
array.add("bbbbb");
array.add("ddddd");
array.add("aaaaa");
Collections.sort(array);
System.out.println("升序排列的结果:");
for(String str:array)
System.out.println(str);
Collections.reverse(array);
System.out.println("降序排列的结果:");
for(String str:array)
System.out.println(str);
}
}
输出结果为:
升序排列的结果:
aaaaa
bbbbb
ccccc
ddddd
降序排列的结果:
ddddd
ccccc
bbbbb
aaaaa
而通过以下指定比较器也是可以实现的:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Sort1 implements Comparator<String> {
private final static int UP = 1;
private final static int DOWN = -1;
private int state;
public Sort1(int state) {
this.state = state;
}
public int compare(String o1, String o2) {
return (state == Sort1.DOWN)? sortDown(o1, o2): sortUp(o1, o2);
}
private int sortUp(String o1, String o2) {
if (o1.compareTo(o2) < 0) {
return -1;
} else if (o1.compareTo(o2) > 0) {
return 1;
} else {
return 0;
}
}
private int sortDown(String o1, String o2) {
if (o1.compareTo(o2) > 0) {
return -1;
} else if (o1.compareTo(o2) < 0) {
return 1;
} else {
return 0;
}
}
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("ccccc");
array.add("bbbbb");
array.add("ddddd");
array.add("aaaaa");
//sort(List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序
Collections.sort(array, new Sort1(Sort1.UP));
System.out.println("升序排列的结果:");
for (String str : array) {
System.out.println(str);
}
Collections.sort(array, new Sort1(Sort1.DOWN));
System.out.println("降序排列的结果:");
for (String str : array) {
System.out.println(str);
}
}
}
其输出结果同上。而当我们需要处理的是对象数组(非String)时,数组的自然序列我们是不知道的,所以,需要使用Comparator进行整体排序(关于Comparator请参见jdk-api 1.6),实现Comparator接口,便要实现其中的compare(T o1, T o2) 。以下程序是进行比较名字,按照lastName优先,firstName其次的原则。
import java.util.*;
public class Sort2 {
public static void main(String[] args) {
ArrayList<Name> name = new ArrayList<Name>();
name.add(new Name("John", "Lennon"));
name.add(new Name("Karl", "Marx"));
name.add(new Name("Groucho", "Marx"));
name.add(new Name("Oscar", "Grouch"));
Collections.sort(name, new Name(new String(), new String()));
for (Name i : name)
System.out.println(i.toString());
}
}
class Name implements Comparator<Name> {
public String firstName, lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public int compare(Name n1, Name n2) {
int Cmp = n1.lastName.compareTo(n2.lastName);
return (Cmp != 0 ? Cmp : (n2.firstName).compareTo(n1.firstName));
}
public String toString() {
return firstName + " " + lastName;
}
}
输出结果为:
Oscar Grouch
John Lennon
Karl Marx
Groucho Marx
(G<L<M 当M相等时,K<G,所以得此输出)对于这种方式,我觉得应该会有更简洁的方式,尤其是对于
Collections.sort(name, new Name(new String(), new String()));
分享到:
相关推荐
- **数组的排序**:如果需要对泛型数组进行排序,可以利用Java的`Collections.sort()`方法(对于集合)或`Arrays.sort()`方法(对于数组),但需要注意,数组的元素必须实现了`Comparable`接口或提供自定义的`...
JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;
- **泛型方法**:如Arrays.sort()可以接受泛型数组并进行排序。 5. **限制与注意事项** - **类型擦除**:泛型信息在运行时不可用,无法在运行时获取泛型类型。 - **不能实例化类型参数**:如 `new T()` 是不允许...
首先,Java泛型是一种在编译时提供类型安全性的机制,它允许我们在创建集合时指定元素的类型。这样可以防止在运行时出现ClassCastException,因为编译器会在代码执行前检查类型匹配。例如,我们可以声明一个只包含...
虽然Java 5.0的`Arrays.sort()`方法不能直接用于多维数组,但可以通过递归或循环的方式,对二维数组的每一行进行单独排序。 四、`Collections.sort()`与`List` 除了`Arrays.sort()`,Java 5.0的`Collections.sort...
感谢所有为Java泛型做出贡献的人们,包括设计者、实现者以及提供反馈和支持的社区成员。泛型是Java语言的一个重要特性,极大地提高了代码的质量和可维护性。 以上就是基于给定文件信息对Java 1.5泛型指南的主要知识...
- **泛型数组**:Java 5引入了泛型,允许创建泛型数组以增强类型安全性。 - **数组操作函数**:Java的`Arrays`类提供了许多实用方法,如`sort()`排序数组,`equals()`比较数组内容,`copyOf()`复制数组等。 - **...
4. **基本类型参数**: Java泛型不能直接接受基本类型(如int、char),但可以通过创建对应的包装类(如Integer、Character)来使用。 5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是...
在Java中,无法直接创建泛型数组,但可以通过数组的组件类型创建非泛型数组,然后用泛型方法进行操作。 9. **数组作为方法参数**: 可以将数组作为方法参数传递,此时数组是按引用传递的,意味着方法内对数组的...
在Java编程语言中,数组是一种重要的...通过深入研究和实践,可以掌握更多高级用法,如泛型数组、数组作为方法参数传递、数组的异常处理等。"在线课第2节_数组"可能进一步探讨这些话题,提供实例和练习,帮助加深理解。
通过学习和练习这些内容,你可以深入理解Java集合框架的核心概念和泛型的应用,从而在编程实践中更加灵活和高效地处理数据。同时,不断的学习和实践是提升技能的关键,希望你能在Java世界中不断进步。
总之,Java泛型单链表提供了一种灵活的数据结构,能够存储各种可比较的数据类型,并且通过其基本操作方法实现了链表的常用功能。这在处理动态数据集或者需要高效插入、删除操作的场景中非常有用。在实际编程中,理解...
Java泛型是Java语言中用于处理不同数据类型的一种机制,它允许开发者在编译时提供类型检查,并通过指定类型参数来创建可重用的代码块。在Java泛型的实施过程中,开发者可以定义泛型类、泛型方法和泛型接口。泛型类...
在Java编程语言的学习过程中,数组是一个基础且重要的概念。...JavaGuide中不仅有数组的入门内容,还逐步引入了更多高级特性,如泛型数组、数组与Stream API的结合使用等,这些都是Java编程中进阶学习的重点。
在这个"java数组总结共9页.pdf.zip"的压缩包中,我们可以期待找到关于Java数组的全面概述,包括其定义、特点、创建、操作以及在实际编程中的应用。下面是对这个主题的详细解释: 1. **数组定义**: Java数组是对象...
此外,Java 5引入的泛型对于数组来说并不完全适用,因为数组需要在创建时就确定元素类型,而泛型是在编译时擦除的。 通过Java数组的学习,我们可以掌握到编程中处理集合数据的基本方法,为进一步学习更复杂的数据...
泛型数组反转方法进一步扩展了数组反转的适用性。通过泛型编程,可以编写出能够处理任意类型数组的通用反转方法。结合方法引用,可以让反转操作既灵活又高效。泛型方法可以配合不同的操作函数,例如通过...
Java泛型与集合框架是Java编程中至关重要的概念,它们极大地增强了代码的可读性、类型安全性以及效率。泛型是Java 5引入的新特性,主要用于集合类,它允许在编译时进行类型检查,避免了运行时的类型转换异常。 泛型...
在Java编程语言中,"Java的常用包"和"数组的复制与排序"是学习的基础且重要的部分。这里,我们主要探讨的是Java的核心库包以及如何处理数组,特别是复制和排序的操作。 首先,让我们深入了解Java的常用包。Java标准...