数组排序和常用类
来源:互联网 发布:测试端口通不通命令 编辑:程序博客网 时间:2024/06/05 13:31
一.数组排序
1.选择排序:
数组的0索引依次和后面的索引进行比较,对应的元素小的往前方法,依次比较,就可以得到一个排好序的数组 规律:
① 选择排序:用0索引对应的元素依次和后面的索引对应的进行比较,小的往前放
② 用由0索引开始比较
1索引进行比较
......
到最后依次:
arr.length-1索引和arr.length-2进行比较
1).直接比较
package Array1;public class ArrayWork1 {public static void main(String[] args) {//定义一个数组,静态初始化int[] arr = {24,69,80,57,13} ;//排序前System.out.println("排序前:");printArray(arr) ;//第一次比较int x = 0 ;for(int y = x +1 ;y < arr.length ; y ++){//判断if(arr[y]<arr[x]){//后面的索引对应的元素小于前面索引对应的元素,互换//第三方变量int temp = arr[x] ;arr[x] = arr[y] ;arr[y] = temp ;}}System.out.println("第一次比较后:");printArray(arr) ;//第二次比较x = 1 ;for(int y = x +1 ;y < arr.length ; y ++){//判断if(arr[y]<arr[x]){int temp = arr[x] ;arr[x] = arr[y] ;arr[y] = temp ;}}System.out.println("第二次比较后:");printArray(arr) ;//第三次比较x = 2 ;for(int y = x +1 ;y < arr.length ; y ++){//判断if(arr[y]<arr[x]){int temp = arr[x] ;arr[x] = arr[y] ;arr[y] = temp ;}}System.out.println("第三次比较后:");printArray(arr) ;//第四次比较x = 3 ;for(int y = x +1 ;y < arr.length ; y ++){//判断if(arr[y]<arr[x]){int temp = arr[x] ;arr[x] = arr[y] ;arr[y] = temp ;}}System.out.println("第四次比较后:");printArray(arr);//遍历数组的功能public static void printArray(int[] arr){System.out.print("[");//遍历数组for(int x = 0 ; x < arr.length ; x ++){//判断是否最大索引if(x==arr.length-1){System.out.println(arr[x]+"]");}else{System.out.print(arr[x]+", ");}}}}
2).利用循环改进
package Array1;public class ArrayWork1 {public static void main(String[] args) {//定义一个数组,静态初始化int[] arr = {24,69,80,57,13} ;//排序前System.out.println("排序前:");printArray(arr) ;for(int x = 0 ;x < arr.length-1 ;x++){for(int y = x +1 ; y<arr.length ; y++){//判断if(arr[y]<arr[x]){int temp = arr[x] ;arr[x] = arr[y] ;arr[y] = temp ;}}}}//调用 selectSort (arr) ;System.out.println("排序后:");printArray(arr) ;} //遍历数组的功能public static void printArray(int[] arr){System.out.print("[");//遍历数组for(int x = 0 ; x < arr.length ; x ++){//判断是否最大索引if(x==arr.length-1){System.out.println(arr[x]+"]");}else{System.out.print(arr[x]+", ");}}}}
3).将选择排序的代码封装成一个独立的功能
package Array1;public class ArrayWork1 {public static void main(String[] args) {//定义一个数组,静态初始化int[] arr = {24,69,80,57,13} ;//排序前System.out.println("排序前:");printArray(arr) ; selectSort (arr) ;System.out.println("排序后:");printArray(arr) ;} public static void selectSort(int[] arr){for(int x = 0 ;x < arr.length-1 ;x++){for(int y = x +1 ; y<arr.length ; y++){//判断if(arr[y]<arr[x]){int temp = arr[x] ;arr[x] = arr[y] ;arr[y] = temp ;}}}}//遍历数组的功能public static void printArray(int[] arr){System.out.print("[");//遍历数组for(int x = 0 ; x < arr.length ; x ++){//判断是否最大索引if(x==arr.length-1){System.out.println(arr[x]+"]");}else{System.out.print(arr[x]+", ");}}}}
2.二分查找
之前查找元素第一次在数组中出现的索引,基本查找法(从头查到尾)二分查找:针对数组一定有序的!
定义一个数组:
11,22 ,33 ,44 ,55 ,66 ,77
步骤:
(1) 有一个排好序的数组
(2) 定义最小索引和最大索引
(3) 计算中间索引
(4) 拿中间索引对应的元素和要查的元素进行比较
相等:直接返回中间索引
不相等:
大了,左边找
小了,右边找
(5) 重新获取最小索引和最大索引
大了,左边找
int max=mid-1;
小了,右边找
int min=mid+1;
(6) 重新计算中间索引(回到第四步)继续查找!
public class ArrayWork2 {public static void main(String[] args) {//定义一个数组,静态初始化int[] arr = {23,32,41,49,51,72,96} ;//需求:查找72元素对应的索引int index = getIndex(arr, 72) ;System.out.println("index:"+index);//需求:要查找333元素对应的索引//如果查找的这个元素在数组中查不到呢?int index2 = getIndex(arr, 987) ;System.out.println("index2:"+index2);}/** * 两个明确: * 明确返回值类型:int类型 * 明确参数类型,几个参数:int[] arr,int value */public static int getIndex(int[] arr,int value){//定义最大索引和最小索引int max = arr.length -1 ;int min = 0 ;//计算中间索引int mid = (max + min)/2 ;//拿中间索引对应的元素和要查找的value元素进行比较while(arr[mid] !=value){//当前mid索引对应的元素不等于value元素,分两种情况if(arr[mid]>value){//重新获取最大索引 max = mid -1 ;}else if(arr[mid]<value){min = mid +1 ;}//如果找不到了应该返回-1//判断if(min>max){return -1 ;}//重新获取最大和最小索引,计算中间索引mid = (max+min)/2 ;}return mid ; //如果直接相等,直接返回}}
二.日历类
Calendar:日历类:
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,
并为操作日历字段(例如获得下星期的日期)提供了一些方法
Calendar 该类是一个抽象类:不能实例化的,所以通过一下这个方法来创建对象
public static Calendar getInstance()
public int get(int field)返回给定日历字段的值
public static final int YEAR: 表示日历中 的年
public static final int MONTH: 月份:是0开始计算的
public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,
并为操作日历字段(例如获得下星期的日期)提供了一些方法
Calendar 该类是一个抽象类:不能实例化的,所以通过一下这个方法来创建对象
public static Calendar getInstance()
public int get(int field)返回给定日历字段的值
public static final int YEAR: 表示日历中 的年
public static final int MONTH: 月份:是0开始计算的
public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天
public class CalendarText {public static void main(String[] args) {// 创建日历类对象Calendar calendar = Calendar.getInstance(); //创建日历类对象,需要通过getInstance()方法创建对象// 获取年// public static final int YEARint year = calendar.get(Calendar.YEAR);// 获取:年中的月份// public static final int MONTHint month = calendar.get(Calendar.MONTH);// 获取月份中的天// public static final int DATEint date = calendar.get(Calendar.DATE);//输出System.out.println(year+"年"+(month+1)+"月"+date+"日");
三.日期类
Date类:日期类:
表示特定的瞬间,精确到毫秒。
常用的构造方式:
public Date():表示分配的一个Date对象:无参: 通过无参构造获取当前系统的具体的时间
public Date(long date):指定一个时间毫秒值 和它1970-1-1 00:00:00有时间差
表示特定的瞬间,精确到毫秒。
常用的构造方式:
public Date():表示分配的一个Date对象:无参: 通过无参构造获取当前系统的具体的时间
public Date(long date):指定一个时间毫秒值 和它1970-1-1 00:00:00有时间差
package DATE;import java.sql.Date;public class DateDemo {public static void main(String[] args) {//创建日期对象Date d = new Date(0) ;//输出日期对象System.out.println("d:"+d);// d:Thu Jan 01 08:00:00 CST 1970: 获取当前系统的年月日以及时分秒 星期//设置一个时间longlong time = 1000/60/60 ;Date d2 = new Date(time) ;System.out.println("d2:"+d2);}}
Date中的两个成员方法
public long getTime():获取当前时间毫秒值
如果知道Date对象,可以通过getTime()获取时间毫秒值
public void setTime(long time)
public long getTime():获取当前时间毫秒值
如果知道Date对象,可以通过getTime()获取时间毫秒值
public void setTime(long time)
public class DateDemo2 {public static void main(String[] args) {//创建一个日期对象Date d = new Date() ;System.out.println(d);//public long getTime():获取当前时间毫秒值long time = d.getTime() ;//System.out.println(time);//System.out.println(System.currentTimeMillis());//通过System可以获取当前时间的毫秒数//public void setTime(long time)d.setTime(1000) ;System.out.println(d);}}
将Date对象--->String类型的日期的"文本格式":格式化
* public final String format(Date date)
* String类型日期的"文本格式"---->Date日期对象:解析
* public Date parse(String source) 该方法本身会抛出一个异常:ParseException(解析异常:编译时期异常)
*
* 要进行转换:必须使用中间桥梁:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
* 日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化
*
* 但是,DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类进行实例化:
* SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
*
* 常用的构造方法:
* Date---格式化--->String文本格式
*
* public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
*
* 日期和时间模式
* y 年比如:2017---->yyyy
* M 年中的月份:2------>MM
* d 月份中的天数 :----->dd
* H 小时HH
* m 小时中的分钟数mm
* s 分钟中的秒数ss
* public final String format(Date date)
* String类型日期的"文本格式"---->Date日期对象:解析
* public Date parse(String source) 该方法本身会抛出一个异常:ParseException(解析异常:编译时期异常)
*
* 要进行转换:必须使用中间桥梁:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
* 日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化
*
* 但是,DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类进行实例化:
* SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
*
* 常用的构造方法:
* Date---格式化--->String文本格式
*
* public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
*
* 日期和时间模式
* y 年比如:2017---->yyyy
* M 年中的月份:2------>MM
* d 月份中的天数 :----->dd
* H 小时HH
* m 小时中的分钟数mm
* s 分钟中的秒数ss
package DATE;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateFormatDemo {public static void main(String[] args) throws ParseException {//Date日期对象--->格式化---->String:日期文本格式//创建日期对象Date d = new Date() ;//System.out.println(d);//创建SimpleDateFormat类对象,用该对象格式化Date对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;//格式化//public final String format(Date date)String dateStr = sdf.format(d) ;System.out.println("dateStr:"+dateStr);System.out.println("-----------------------");//String日期"文本格式"----->解析----->Date对象/** * 注意事项: * 一定要保证SimpleDateFormat中的String Pattern这个模式和当前给的字符串的文本格式的模式必须一致! */String s = "2017-12-30" ;//创建SimpleDateFormat类的对象,用该对象解析String的日期的"文本格式"//SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日") ;SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd") ;//ava.text.ParseException: Unparseable date: "2017-12-30"//开始解析//public Date parse(String source)Date d2 = sdf2.parse(s);System.out.println("d2:"+d2);}}
四.system类
System:该类没有构造方法,所以字段和成员方法都用静态修饰
常用的两个字段:
in ,out都和流有关系:java.io...
PrintStream(字节打印流) ps = System.out ;标准输出流
PrintWriter(字符打印流)
InputStream in = System.in; 标准输入流
常用的成员方法:
public static void gc()运行垃圾回收器。
调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存,最终调用的就是重写之后finalize()回收不用
的对象!
public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
public static long currentTimeMillis():返回当前的时间毫秒值
常用的两个字段:
in ,out都和流有关系:java.io...
PrintStream(字节打印流) ps = System.out ;标准输出流
PrintWriter(字符打印流)
InputStream in = System.in; 标准输入流
常用的成员方法:
public static void gc()运行垃圾回收器。
调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存,最终调用的就是重写之后finalize()回收不用
的对象!
public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
public static long currentTimeMillis():返回当前的时间毫秒值
public class SystemDemo {public static void main(String[] args) {//输出语句/*System.out.println("电子竞技没有爱情");//调用exit()方法System.exit(0) ;//JVM已经退出了,还可结束循环语句,调用该方法Jvm都退出了,所以循环也就结束了System.out.println("我们不一样"");*///单独使用//long time = System.currentTimeMillis() ;//获取当前系统时间毫秒值//System.out.println(time);//currentTiimeMillis():单独使用没意义//需求:计算某一个应用程序的耗时的毫秒数long start = System.currentTimeMillis() ;//for循环for(int x = 0 ; x <100000;x ++){System.out.println("hello"+x);}long end = System.currentTimeMillis() ;System.out.println("当前for循环语句共耗时:"+(end-start)+"毫秒");//当前for循环语句共耗时:2621毫秒 }}
System里面的常用的成员方法:
public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)
指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)
指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
package system;import java.util.Arrays;public class SystemDemo2 {public static void main(String[] args) {//定义两数组,静态初始化int[] arr1 = {12,31,42,58,72,99} ;int[] arr2 = {3,4,5,6,7,8,9} ;//复制数组System.arraycopy(arr1, 2, arr2, 1, 2) ;//分别将arr1 和arr2数组以字符串形式显示出来System.out.println("arr1:"+Arrays.toString(arr1));System.out.println("arr2:"+Arrays.toString(arr2));}}
阅读全文
0 0
- 数组排序和常用类
- 笔记:数组和集合的常用排序
- 常用数组排序算法
- 数组常用排序
- 数组常用的排序
- php 常用数组排序
- 常用数组排序算法
- 常用类和数组习题
- 数组常用排序,查找算法
- 数组排序的常用算法
- Java常用的数组排序
- 动态定义数组和使用两种常用的排序法进行排序
- java排序(数组)常用排序总结
- R类数组的排序和查找
- 数组复制和排序
- 数组排序和交集
- 数组和快速排序
- JAVA-数组和排序
- 搭建新项目注意事项
- Modo教程合集44部
- Lua基础之字符串
- 用CSS3设计响应式导航菜单
- SQL Server,MySQL,Oracle三者的区别
- 数组排序和常用类
- 单片机中映射表在UI设计中的应用
- MySQL 输入密码闪退
- java 异常
- Android睡眠唤醒机制--Kernel态
- Hive 字符串函数
- 史上最简单清晰的红黑树讲解
- java.util.zip.ZipException: invalid LOC header (bad signature)
- pom.xml报错:web.xml is missing and <failOnMissingWebXml> is set to true