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

------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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值