- 浏览: 41352 次
- 性别:
- 来自: 杭州
最近访客 更多访客>>
文章分类
最新评论
-
Demin7926:
正好想要这样的数据,而且最好还是.mdf的,但还是不错了,多谢 ...
中国地区数据库Access c#生成sql数据文件 -
zhuzidian:
1.这个classpath是没有必要设置的,那几个jar默认会 ...
Java开发环境的搭建 -
蜡笔小新:
收下
请问第2条中,J2EE开发环境下载什么样的sdk呢?
Java开发环境的搭建
排序接口
package book.oo.sort; /** * 定义数字排序的接口 */ public interface ISortNumber { /** * 对整型数组按升序排序 * @param intArray 待排序的整型数组 * @return 按升序排序后的数组 */ public int[] sortASC(int[] intArray); }
冒泡法
package book.oo.sort.impl; import book.oo.sort.ISortNumber; /** * 采用冒泡法对整型数组排序 */ public class BubbleSort implements ISortNumber { public BubbleSort() { } /** * 冒泡排序法 */ public int[] sortASC(int[] intArray) { if (intArray == null){ return null; } //因为Java的参数传递是采用引用传值方式,因为在排序的过程中,需要对改变数组, //所以,为了保证输入参数的值不变,这里采用了数组的clone方法,直接克隆一个数组。 int[] srcDatas = (int[]) intArray.clone(); boolean changedPosition = true; int comparedTimes = 0; int maxComparedTimes = srcDatas.length - 1; while ((comparedTimes < maxComparedTimes) && (changedPosition)) { for (int i = 0; i < (maxComparedTimes - comparedTimes); i++) { changedPosition = false; if (srcDatas[i] > srcDatas[i + 1]) { swap(srcDatas, i, i + 1); changedPosition = true; } } comparedTimes++; } return srcDatas; } /** * 交换数组中下标为src和dest的值 * @param data 数组 * @param src 源下标 * @param dest 目标下标 */ private void swap(int[] data, int src, int dest) { int temp = data[src]; data[src] = data[dest]; data[dest] = temp; } }
线性插入排序法
package book.oo.sort.impl; import book.oo.sort.ISortNumber; /** * 采用线性插入排序法实现数组的排序 */ public class LinearInsertSort implements ISortNumber { public LinearInsertSort(){ } /** * 线性插入法 */ public int[] sortASC(int[] intArray) { if (intArray == null){ return null; } int[] srcDatas = (int[]) intArray.clone(); int size = srcDatas.length; int temp = 0; int index = 0; //假定第一个数字是已经排好了序列,所以i是从1开始而不是从0开始。 for (int i=1; i<size; i++){ temp = srcDatas[i]; index = i; while ((index > 0) && (temp < srcDatas[index-1])){ //移动index后面的数字 srcDatas[index] = srcDatas[index-1]; index--; } srcDatas[index] = temp; } return srcDatas; } }
快速排序法
package book.oo.sort.impl; import book.oo.sort.ISortNumber; /** * 采用快速排序法实现数组的排序 */ public class QuickSort implements ISortNumber { public QuickSort(){ } /** * 快速排序法 */ public int[] sortASC(int[] intArray) { if (intArray == null){ return null; } int[] srcDatas = (int[]) intArray.clone(); return this.quickSort(srcDatas, 0, srcDatas.length - 1); } /** * 采用分治递归的方法实现快速排序法 * @param srcDatas 待排序的数组 * @param first 起始下标 * @param last 终止下标 * @return */ private int[] quickSort(int[] srcDatas, int first, int last) { if (first < last) { int pos = partition(srcDatas, first, last); quickSort(srcDatas, first, pos - 1); quickSort(srcDatas, pos + 1, last); } return srcDatas; } /** * 寻找数组的分治点, * 根据数组的第一个数分治,把比数组第一个数大的往后排,把比数组第一个数小的往前排 * @param srcDatas * @param first * @param last * @return 传入数组的第一个数的最终下标 */ private int partition(int[] srcDatas, int first, int last) { int temp = srcDatas[first]; int pos = first; for (int i = first + 1; i <= last; i++) { if (srcDatas[i] < temp) { pos++; swap(srcDatas, pos, i); } } swap(srcDatas, first, pos); return pos; } /** 交换数组中下标为src和dest的值*/ private void swap(int[] data, int src, int dest) { int temp = data[src]; data[src] = data[dest]; data[dest] = temp; } }
选择排序法
package book.oo.sort.impl; import book.oo.sort.ISortNumber; /** * 使用选择排序法对整型数组进行排序 */ public class SelectionSort implements ISortNumber { public SelectionSort(){ } /** * 选择排序法 */ public int[] sortASC(int[] intArray) { if (intArray == null){ return null; } //因为Java的参数传递是采用引用传值方式,因为在排序的过程中,需要对改变数组, //所以,为了保证输入参数的值不变,这里采用了数组的clone方法,直接克隆一个数组。 int[] srcDatas = (int[]) intArray.clone(); int size = srcDatas.length; for (int i = 0; i < size; i++) { for (int j = i; j < size; j++) { if (srcDatas[i] > srcDatas[j]) { swap(srcDatas, i, j); } } } return srcDatas; } /** * 交换数组中下标为src和dest的值 * @param data 数组 * @param src 源下标 * @param dest 目标下标 */ private void swap(int[] data, int src, int dest) { int temp = data[src]; data[src] = data[dest]; data[dest] = temp; } }
测试类
package book.oo.sort; import book.oo.sort.impl.BinaryInsertSort; import book.oo.sort.impl.BubbleSort; import book.oo.sort.impl.LinearInsertSort; import book.oo.sort.impl.QuickSort; import book.oo.sort.impl.SelectionSort; public class SortTest { /** * 打印数组 * @param intArray 待打印的数组 */ public static void printIntArray(int[] intArray){ if (intArray == null){ return; } for (int i=0; i<intArray.length; i++){ System.out.print(intArray[i] + " "); } System.out.println(); } public static void main(String[] args){ int[] intArray = new int[]{6,3,4,2,7,2,-3,3}; System.out.print("排序前的数组:"); printIntArray(intArray); ISortNumber test = new SelectionSort(); System.out.print("选择排序法排序结果:"); printIntArray(test.sortASC(intArray)); System.out.print("排序前的数组:"); printIntArray(intArray); test = new BubbleSort(); System.out.print("冒泡排序法排序结果:"); printIntArray(test.sortASC(intArray)); System.out.print("排序前的数组:"); printIntArray(intArray); test = new LinearInsertSort(); System.out.print("线性插入排序法排序结果:"); printIntArray(test.sortASC(intArray)); System.out.print("排序前的数组:"); printIntArray(intArray); test = new BinaryInsertSort(); System.out.print("二分插入排序法排序结果:"); printIntArray(test.sortASC(intArray)); System.out.print("排序前的数组:"); printIntArray(intArray); test = new QuickSort(); System.out.print("快速排序法排序结果:"); printIntArray(test.sortASC(intArray)); } // 排序前的数组:6 3 4 2 7 2 -3 3 // 选择排序法排序结果:-3 2 2 3 3 4 6 7 // 排序前的数组:6 3 4 2 7 2 -3 3 // 冒泡排序法排序结果:2 2 -3 3 3 4 6 7 // 排序前的数组:6 3 4 2 7 2 -3 3 // 线性插入排序法排序结果:-3 2 2 3 3 4 6 7 // 排序前的数组:6 3 4 2 7 2 -3 3 // 二分插入排序法排序结果:-3 2 2 3 3 4 6 7 // 排序前的数组:6 3 4 2 7 2 -3 3 // 快速排序法排序结果:-3 2 2 3 3 4 6 7 }
发表评论
-
JDK_实例(求指定范围内的质数)
2009-11-20 14:15 844package book.arrayset; impor ... -
JDK_实例(使用Arrays)
2009-10-29 13:28 696package book.arrayset; impor ... -
JDK_实例(处理大数字)
2009-10-29 13:21 1035package book.number; import ... -
JDK_实例(生成随机数)
2009-10-29 13:20 1935package book.number; import ... -
JDK_实例(转换数字的进制)
2009-10-29 13:16 984package book.number; /** * ... -
JDK_实例(数字的舍入)
2009-10-29 13:14 916package book.number; import ... -
JDK_实例(格式化数字)
2009-10-29 13:05 579package book.number; import ... -
JDK_实例(数字和数字封装类)
2009-10-29 13:02 711package book.number; /** * ... -
JDK_实例(Adapter 适配器模式)
2009-10-29 12:43 1493接口 package book.oo.sort; / ... -
JDK_实例(Factory工厂模式)
2009-10-29 12:39 837接口 package book.oo.factory; ... -
JDK_实例(Singleton单列模式)
2009-10-29 12:35 1024A package book.oo.singleton; ... -
JDK_实例(方法与变量在继承时的覆盖和隐藏)
2009-10-29 12:24 782父类 package book.oo.cov ... -
JDK_实例(类的加载顺序)
2009-10-29 12:20 719父类 package book.oo.initorder; ... -
JDK_实例(自定义形状类)
2009-10-29 12:12 787长方形 package book.oo; ... -
JDK_实例(Java 参数传递)
2009-10-29 12:05 904package book.oo; public clas ... -
JDK_实例(复数类)
2009-10-29 11:52 846package book.oo; public clas ... -
JDK_实例(命令行程序)
2009-10-29 11:29 666package book.basic; public c ... -
JDK_实例(计算阶乘)
2009-10-29 11:28 698package book.basic; public c ... -
JDK_实例(控制程序流程)
2009-10-29 11:27 548package book.basic; public c ... -
JDK_实例(java 运算符)
2009-10-29 11:24 791package book.basic; public c ...
相关推荐
Java JDK实例开发宝典是一本专注于Java编程实践的书籍,旨在通过丰富的实例帮助开发者深入理解和应用Java语言。在深入探讨Java JDK(Java Development Kit)的过程中,本书覆盖了多个关键知识点,包括基础语法、面向...
`Arrays`类提供了并行版本的排序和处理方法,利用多核CPU提升执行效率。 以上就是JDK API 1.7的一些核心特性,了解并熟练运用这些功能,能显著提升Java开发的效率和代码质量。Java API文档是学习和查找这些特性的...
Lambda表达式可以替代那些具有单个抽象方法的接口的匿名类实例,通常用于处理集合或事件驱动的编程。 2. **函数式接口**:为支持Lambda表达式,Java 8引入了`@FunctionalInterface`注解,用于标识只含有一个抽象...
1. **增强的Swing UI组件**:JDK 6对Swing用户界面库进行了大量优化,增加了新的组件和功能,如JTable的行排序和过滤,以及更强大的JTabbedPane。 2. **动态代理**:Java 6引入了`java.lang.reflect.Proxy`类,允许...
例如,使用`java.util.concurrent.Callable`接口时,可以直接引用一个方法,而不用创建整个匿名类实例。 三、默认方法 接口在JDK 1.8中新增了默认方法的特性,允许接口中定义带有实现的方法,这样可以在不破坏向后...
- `Constructor类`: 代表类的构造器,用于动态实例化对象。 8. **国际化** - `ResourceBundle类`: 提供本地化资源管理,支持不同语言环境下的字符串和其他资源。 - `Locale类`: 表示特定的地理、文化和社会习惯...
9. **双括号初始化**:这是一种语法糖,可以快速创建匿名内部类实例,常用于创建集合或自定义对象。 10. **重复注解**:JDK 8允许在同一元素上重复应用相同类型的注解,增强了注解的灵活性。 通过这份JDK 8 API...
构造器引用则可以直接创建类的新实例。 3. **流(Stream)**:Java 8引入了流API,使得处理集合数据变得更加高效和简洁。流可以进行过滤、映射、排序等操作,支持并行处理,从而提高程序性能。 4. **默认方法**:在...
1. **多路归并排序**:在Java 7中,`java.util.Arrays.sort()`方法进行了优化,采用了多路归并排序算法,提高了排序性能,尤其对于大数据量的数组,效果显著。 2. **字符串inswitch**:新增了`switch`语句对字符串...
2. **多路归并排序**:在Java 7中,`Arrays.sort()` 方法使用了多路归并排序算法,提高了排序性能,尤其是处理大数据量时。 3. **字符串连接优化**:Java 7对字符串连接操作进行了优化,使用StringBuilder时,如果...
9. **改进的集合框架**:添加了`Objects`类,提供了实用的静态方法,如`equals()`、`hashCode()`和`requireNonNull()`,还有`Collections`的`copy()`和`replaceAll()`方法的增强。 10. **并发改进**:`Fork/Join`...
- `Arrays`类提供了`copyOf()`和`copyOfRange()`方法的变体,允许复制已排序的数组到一个新的排序数组。 4. **异常处理**: - 多异常捕获:可以使用`catch`块同时捕获多种类型的异常,使用`|`分隔不同类型的异常...
例如,`Arrays.sort(list, Comparator.comparing(Person::getAge))` 就是一个方法引用的例子,它使用了`Person`类的`getAge`方法来排序一个`Person`对象列表。 再者,Java 8新增了日期和时间API(java.time包),...
JDK 1.8还引入了Optional类,用来表示可能为null的对象引用。Optional对象可以避免空指针异常,通过强制程序员显式处理null情况,提高了代码的健壮性。它通过API提供了检查是否包含值、获取值、转换值等多种方法,让...
- **钻石运算符**:在创建带泛型的匿名类实例时,编译器可以自动推断类型,如`new ArrayList()`。 - **二进制字面量**:可以直接使用二进制前缀`0b`来表示二进制数字,如`0b1010`。 - **多路归约**:`Stream` API中...
7. **并行数组操作**:Arrays类增加了新的并行流和并行排序方法,使得大规模数据处理更加高效。 8. **改进的垃圾收集器**:JDK7对垃圾收集器进行了优化,例如G1(Garbage First)垃圾收集器,旨在提供更稳定的暂停...
9. **并行数组操作**:Arrays类增加了新的并行处理方法,如parallelSort(),可以在多核处理器上进行高效的排序。 10. **类型推断**:Java 8的编译器增强了类型推断能力,使得在某些情况下,类型可以由编译器自动...
Java JDK实例开发宝典是一本专注于Java开发实践的书籍,主要涵盖了JDK中的核心特性和常见工具的使用方法。在本书中,读者可以找到一系列精心设计的实例,旨在帮助开发者深入理解和熟练应用Java语言。以下是对书中...
这些方法在接口中用default关键字声明,可以在不实现该接口的类的实例上调用。 新的日期时间API(java.time包)取代了旧的java.util.Date和java.util.Calendar,提供了更直观、线程安全的日期和时间处理。这个API...
### 通过分析JDK源代码研究TreeMap红黑树算法实现 #### 一、TreeMap与TreeSet的关系 TreeMap 和 TreeSet 是 Java 集合框架中的重要成员,它们提供了基于红黑树的数据结构实现。从给定部分源代码可以看到,TreeSet ...