大数据第十六天

1、数组常用排序算法:冒泡排序,选择排序

冒泡排序:

相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处(当然也可以根据要求把最小值放最后),第二次比较后,最大值放在了倒数第二的位置,一致到第二个元素确定了,整个数组的顺序也就确定了。

冒泡排序的外层循环是需要确定位置的数的个数,换句话说,也就是有几个数需要确定位置,它的值是数组元素数少1,如果元素为5个的话,则需要确定四个数的位置,第五个数就已经定下来了,整个数组的顺序就被确定了,这里取最大值还是最小值完全看业务逻辑,都能完成。

选择排序:

从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

外层循环控制的是总共需要确定位置的数的次数,比如有五个数,那么只需要确定四个数的位置即可,从小到大排序。

外层循环第一次,确定的是第一个位置的数:

第一次拿第一个元素和第二个元素比,如果比它小,则交换;

第二次拿第一个元素和第三个元素比,如果比它小,则交换;

...

直到第一个数和最后一个数比完,得出的结果就是第一个位置上的数是所有数中的最小值

外层循环第二次,确定的是第二个位置上的数;

第一次拿第二个位置上的数和第三个位置上的数比,比它小,则交换;

第二次拿第二个位置上的数和第四个位置上的数比,比它小,则交换;

...

直到第二个数和最后一个比完,得出的结果就是第二个位置上的数是剩余数中的最小值

外层循环N-1次,得出的结果就是最小值在前。选择排序有可能造成多次交换的现象。

总结:

两种排序最大的不同是里层循环的开始值和结束值:

冒泡排序:内层循环的开始值都是从0开始,结束值是变化的

选择排序:内层循环的开始值是变化的,结束值是固定的,都是最大索引值。

2、数组二分法查找算法

前提:已经有序的数组(升序或者降序都可以,只不过在判断中要根据逻辑做更改)

查找:基本查找:数组元素无序(从头到尾)

二分查找(折半查找):数组元素有序

分析:

A:定义最大索引,最小索引

B:计算出中中间索引

C:拿中间索引的值和要查找的值进行比较

相等:就返回当前的中间索引

不相等:

大  左边找

小  右边找

D:重新计算出中间索引

大  左边找

  max = mid -1

小  右边找

  min  = mid +1

E:回到B 

3、Arrays工具类的常用方法

系统提供的针对数组进行操作的工具类。

静态方法:

public static String toString(int[ ] a):将数组转换成字符串

public static void sort(int[ ] a):对一个int数组进行升序排序ascending

public static int binarySearch(int[ ] a,int key):在数组中进行二分查找

4、基本数据类型的包装概念,Integer包装类的常见方法

基本类型包装类概述:

基本数据类型的包装类,就是把基本数据类型的值再进行一次包装,封装成一个类,其中包含一些静态和非静态方法。

其好处在于可以在类中定义更多的功能方法操作该数据。

常用的操作之一:用于基本类型与字符串之间的转换。

字符串转int

字符串转double

...

byte---------Byte

short--------Short

int------------Integer

long----------Long

float----------Float

double-------Double

char-----------Character

boolean--------Boolean

Integer,Character名称上有些变化,其余类名都是把基本数据类型的类型首字母大写

Integer类概述及其构造方法

Integer类概述

Integer类在对象中包装了一个基本类型int的值

该类提供了多个方法,能在int类型和String类型之间互相转换,还提供了处理int类型时非常有用的其他一些常量和方法

构造方法

public Integer(int value):通过一个int值构造一个Integer对象

publicInteger(String s:通过一个字符串构造一个Integer对象

Integer类成员方法

int类型和String类型的相互转换

public int intValue:返回当前对象包装的基本数据类型的int值

public static int parseInt(String s):将一个字符串转换成int值

public static String toString(int i):将一个int值转换成字符串

public static Integer valueOf(int i):用一个int值构建一个Integer对象

public static Integer valueOf( String s):用一个字符串构建一个Integer对象

后两种相当于调用了Integer类的构造方法,效果上是一样的

5、引用数据类型变量强制转换

引用变量的强制类型转换需要注意的事项:

引用类型之间的转换只能在具有继承关系的两个类型之间进行,如果是两个没有任何继承关系的类型,则无法进行类型转换。

如果试图将一个父类实例变量转换成子类类型,则这个对象必须实际上是子类的实例才行(

即编译时为父类类型,而运行时为子类类型)否则将在运行时引发ClassCastExveption异常。

6、StringBuilde类的常见方法——查API文档

由于String对象是不可变的,所以,如下的语句将产生五个字符串常量:

String s1 = "hello";

s1 = s1 + "world";

s1 = s1 + "java";

除了三个字符串常量外,还将额外产生两个字符串常量"helloworld","helloworldjava"

为了避免产生过多的额外临时变量,可以使用StringBuffer或者是StringBuilder,前者是线程安全的,在使用方法上,两者都相同

StringBuffer 和StringBuilder有两个属性,length和capacity,前者表示的是当前对象中包含的字符序列的长度,可以通过length()和setLength(int len)方法来访问或者设置字符串序列的长度。后者表示的是容量,通常容量都比length要大一些。程序中无需关心capacity的值,会随着字符串长度的变化而变化

7、String类常见用法——查API文档

String类代表的是一串字符,例如,“abc”就是一个String类的实例,String的值是固定的,永恒的,即一个字符串一旦被创建了,包含在这个对象的字符序列就是不可更改的,直到这个对象被销毁。

StringBuffer这个类则代表了一个字符序列可变的字符串,当一个StringBuffer对象被创建后,可以通过其提供的append(),insert(),reverse(),setLength()等方法等方法改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终的字符串,就可以通过调用它的toString()方法将其转换成一个String对象。

String类构造方法:

String(char[] value)

通过一个字符数组创建一个字符串对象

char[] data = {'a','b','c'};

String str = new String(data);

String(char[] value,int offset,int count)

将指定的字符数组从offset开始,长度为count的字符元素连成字符串

String(String original)

根据一个字符串常量来创建一个String对象,也就是说,新创建的String对象是该参数字符串的副本

char ch = "abc".charAt(2);  //返回指定索引位置的单个字符

boolean isEqu = "abcd".equals("ABCD");//false

boolean isEqual = "abcd".equalsIgnoreCase("ABCD");//true

String类常用方法:

截取子串:

String s2 = "abcd".substring(2,3);//c? cd?

substring返回的是从开始索引到结束索引-1 的位置之间的字符串,返回的字符串的长度是:endIndex - startIndex,例子中截取的子串的长度就是1

int compareTo(String anotherString)

比较两个字符串的大小,如果两个字符串的字符序列完全相等,则返回0;不相等时,从两个字符串的第0个字符开始比较,返回第一个不相等的字符差(即两个字符的编码的差),当一个较长的字符串的前面的部分恰巧是一个短的字符串,则返回它们的长度差

String s1 = "helloabcd";

String s2 = "hello";

String s3 = "hellod";

System.out.println("s1.compareTo(s2) "+s1.compareTo(s2));//4

System.out.println("s1.compareTo(s3) "+s1.compareTo(s3));//-3

System.out.println((int)'a');//97

System.out.println((int)'d');//100

static String copyValueOf(char[] data)

将字符数组连成字符串,与String(char[] content)构造方法作用相同

boolean endsWith(String suffix)

判断是否以一个字符串结尾

char[] c = {'h','e','h','e'};

String s1 = String.copyValueOf(c);

System.out.println("s1 :"+s1);

 

boolean b1 = s1.endsWith("ha");

boolean b2 = s1.endsWith("he");

System.out.println(b1);

System.out.println(b2);

int indexOf(int ch)

返回字符ch在字符串第一次出现的位置,查看API发现并没有形参为字符的方法,那传入一个字符是否合法?也合法

int length()

返回当前字符串对象的长度

boolean startsWith(String prefix)

返回当前字符串是否以某个字符串开头

boolean equals(Object obj)

为什么形参是一个Object类型的呢?查看继承关系

查看源码:了解equals()方法的实现原理

原文地址:https://www.cnblogs.com/zhaoyongcx/p/6649042.html