黑马程序员——常用API——数组高级,Arrays,Integer

来源:互联网 发布:如何提高个人魅力 知乎 编辑:程序博客网 时间:2024/06/05 02:12

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一.数组的高级操作


1.数组就是存储相同数据类型的多个元素的容器。

2.特点是每个元素都有从0开始编号的索引,最后一个索引是length-1.

3.数组操作:

A:遍历

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;"><span style="white-space:pre"></span>public static void printArray(int[] arr) {for(int x=0; x<arr.length; x++) {System.out.print(arr[x]+" ");}}</span></strong></span>


B:获取最大值

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="white-space:pre"></span>public static int getMax(int[] arr) {int max = arr[0];for(int x=1; x<arr.length; x++) {if(arr[x]>max) {max = arr[x];}}return max;}</strong></span>



C:排序

a:冒泡排序
原理:相邻元素做比较,大的元素放后边。第一次完毕,最大值在最大索引处,
同理,其他的元素也这样排好。
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="white-space:pre"></span>public static void bubbleSort(int[] arr) {for(int x=0; x<arr.length-1; x++) {for(int y=0; y<arr.length-1-x; y++) {if(arr[y] > arr[y+1]) {int temp = arr[y];arr[y] = arr[y+1];arr[y+1] = temp;}}}}</strong></span>



b:选择排序
原理:从0索引元素开始,依次和后面的所有元素比较,小的往0索引处放。
     第一次比较完毕后,最小值在最小索引处。同理,其他的元素也这样排好。


<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="white-space:pre"></span>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[y];arr[y] = arr[x];arr[x] = temp;}}}}</strong></span>



D:查找

a:普通查找(一般在数组无序的情况下使用)
原理:遍历数组,依次从头找到尾


<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="white-space:pre"></span>public static int getIndex(int[] arr,int value) {int index = -1;for(int x=0; x<arr.length; x++) {if(arr[x]==value) {index = x;break;}}return index;}</strong></span>



b:二分查找法(一般在数组有序的情况下使用)
前提:数组必须是从小到大排过序的


原理:每次都从中间开始找,如果比中间数据小,就在左边找,
     如果比中间数据大,就在右边找,如果相等,就返回中间的索引值。


<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="white-space:pre"></span>public static int getIndex(int[] arr,int value) {int start = 0;int end = arr.length-1;int mid = (start+end)/2;while(arr[mid]!=value){if(value>arr[mid]) {start = mid + 1;}else if(value<arr[mid]) {end = mid - 1;}if(start > end) {return -1;}mid = (start+end)/2;}return mid;}</strong></span>



二.Arrays工具类的使用


1.Arrays是专门针对数组数据进行操作的工具类。

2.主要功能:

A:把数组转成字符串
public static String toString(int[] arr)

B:排序
public static void sort(int[] arr)

C:二分查找
public static int binarySearch(int[] arr,int value)



三.StringBuffer类与StringBuilder类


1.StringBuffer:是字符串缓冲区类,容量可以改变。

2.简答题:

A:String和StringBuffer的区别?

String的长度是固定。
StringBuffer的长度可以改变。

StringBuffer和StringBuilder的区别?

StringBuffer与StringBuilder的功能一致.
StringBuffer的线程安全,效率低。
StringBuilder的线程不安全,效率高。

3.StringBuffer的构造方法
A:StringBuffer sb = new StringBuffer();
B:StringBuffer sb = new StringBuffer(int capacity);
C:StringBuffer sb = new StringBuffer(String s);


注意:StringBuilder的功能和StringBuffer一模一样。StringBuilder是JDK5以后出现的。
4.主要功能
A:添加功能 public  StringBuffer append(int a)
B:删除功能 public  StringBuffer delete(int start,int end)
C:其他功能
替换功能 public  StringBuffer replace(int start,int end,String str)
截取功能 public  StringBuffer subString(int start,int end)
反转功能 public  StringBuffer reverse()
5.练习:
把一个字符串反转。

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.day13;//把一个字符串反转输出  "abcde"public class Test5 {public static void main(String[] args) {String s = "abcde";// 将字符串转化为字符数组char[] arr = s.toCharArray();// 倒着遍历数组for (int i = arr.length - 1; i >= 0; i--) {System.out.print(arr[i]);}}}</span></strong></span>






四.基本数据类型包装类


1.之前我们对基本类型只能做一些最简单的操作,
  为了让我们有更多的操作,java就针对每种基本类型提供了保证类。
  
2.八种基本类型对应的包装类

byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

3.Integer类的构造方法

A:Integer i = new Integer(int x);
B:Integer i = new Integer(String s);
s必须是由数字字符组成的字符串

4.Integer的功能

A:String -- int
String s = "34";
int i = Integer.parseInt(s);


B:int -- String
int i = 54;
String s = String.valueOf(i);

5.JDK5以后的新特性

A:自动装箱 从int--Integer
B:自动拆箱 从Integer--int


下面的代码:哪里体现了自动装箱,哪里体现了自动拆箱
Integer i = 100;//赋值操作体现了自动装箱
i += 200; //首先参与运算体现了自动拆箱,后赋值操作体现了自动装箱
System.out.println(i);


6.练习1:
byte缓冲池
<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.day13;/* * 基本类型包装类的注意事项: * 使用自动拆箱进行数据计算时,需要注意滤空操作。 * java虚拟机为了优化8种基本数据类型的包装对象都提供了缓冲池,缓冲池有大小,一个字节。 * 当数值在一个字节内时,不再创建新的对象,而使用缓冲池中已经存在的对象。 * 当数值超过一个字节会创建新的对象。 */public class Demo9 {public static void main(String[] args) {Integer i1 = new Integer(127);Integer i2 = new Integer(127);System.out.println(i1 == i2);Integer i3 = new Integer(128);Integer i4 = new Integer(128);System.out.println(i3 == i4);Integer i5 = 128;Integer i6 = 128;System.out.println(i5 == i6);Integer i7 = 127;Integer i8 = 127;System.out.println(i7 == i8);}}</span></strong></span>


因为一个字节只能代表-128-127,所以超过127的都会重新创建对象.
运行结果是
false
false
false
true



7.练习2:
把字符串"34 -12 56 93 27"中的数据排序并输出。


<span style="font-family:FangSong_GB2312;font-size:18px;"><strong><span style="font-family:FangSong_GB2312;font-size:18px;">package cn.day13;//把字符串"34 -12 56 93 27"中的数据排序,然后输出排序后的字符串。public class Test4 {public static void main(String[] args) {String s = "34 -12 56 93 27";sortString(s);}private static void sortString(String s) {// 首先将字符串进行分割为字符串数组String[] arr = s.split(" ");// 定义int数组int[] arri = new int[arr.length];// 将数组进行遍历并转换为int类型for (int i = 0; i < arr.length; i++) {String string = arr[i];// 将字符串转化为int值int temp = Integer.parseInt(string);// 将int值装入int数组arri[i] = temp;}// 将int数组进行排序for (int i = 0; i < arri.length - 1; i++) {for (int j = i + 1; j < arri.length; j++) {if (arri[i] > arri[j]) {int temp = arri[i];arri[i] = arri[j];arri[j] = temp;}}}// 遍历排序后的数组for (int i = 0; i < arri.length; i++) {System.out.print(arri[i] + " ");}}}</span></strong></span>


0 0