二分查找法(折半查找,采用递归完成):
前提,数组先排序
二分查找法(折半查找,采用递归完成):
前提,数组先排序
引用传递的本质是别名,别名存在栈内存中,一块堆内存可以被多个栈内存指向
没有任何栈内存指向的堆内存空间叫做垃圾空间。
GC(垃圾收集器)收集垃圾空间
堆内存空间:保存真正的数据,保存对象的属性信息;
栈内存空间:保存堆内存的地址,堆内存的操作权,可以简化理解为保存的是对象名称
new表示开辟新的堆内存空间,内存地址被栈保存着
一个栈只能存一个地址
只有引用数据类型会产生NullPointerExpection错误,以后出现了就根据错误的位置观察是否实例化
OOA(面向对象分析)OOD(面向对象设计)OOP(面向对象编程)
dgasdfasdf
字节与字符串的操作
将字节数组变成字符串: new string (byte[])
字符串转字节数组:str.getByte()
字符串部分转字节数组:
字节不适合处理中文
支持字符串与字符数组相互转换
字符串转字符数组: str.toCharArray();
字符数组转字符串: new string(字符数组)
部分转换: new string (字符数组,起始index,长度)
如果返回值为boolean的,方法命名一般用is**命名
学习正则表达式!
string类方法必须背下来!!!
(成员)field
(构造方法)constructor
(普通方法)Method
字符串的使用 就采用直接复制的模式完成
字符串内容比较,采用equals()方法实现
字符串最好不要频繁改变
如下代码不该出现;
str+="hello"
字符串不适合频繁修改,否则会出现大量内存垃圾。
string str= new string ("hello");
会产生堆内存垃圾空间,且没有保存到string对象池中。
如何将其保存到对象池中?
string str= new string ("hello").intern( );
字符串两种实例化的区别:
直接赋值:只开辟一块堆内存,而且内容保存在对象池中,以供下次使用。
构造方法:会开辟两块堆内存,并产生垃圾堆空间,而且不能直接保存在对象池中
字符串常量,是string类的匿名对象
日后开发过程中,如果要判断用户输入的字符串是否等于指定的字符串时,一定将指定字符串写在前面。。而不能将用户输入的字符串写在前面,因为要考虑用户没有输入内容的情况,这种情况,字符串为null,此时会出现空指针错误
比较操作的方法一:
数据接收的时候,要考虑用户没有输入数据的情况。
string类能不能使用"=="?
“==”比较的是数值
如果str1余str2进行==;比较的是物理地址比较
内容比较用 equals();
所以string内容比较用的是 equals()方法
string类对象实例化:
1:直接赋值实例化对象
2:
对象数组;定义为数组的对象
对象数组往往以引用类型数据定义
对象数组定义的两种格式:
对象数组动态初始化 :
类名称 对象数组名称 []=new 类名称[长度]
对象数组静态初始化:
类名称 对象数组名称 []=new 类名称[]{ 实例化对象。。。}
动态初始化后,对象数组中的每个元素都是其对应数据类型的默认值
数组查询:
遍历法;
二分法(折半查找法)(前提是数组排序):先找数据中间点,判断当前数据在前半部分还是后半部分。,然后再判断数据在新数组的前半部分还是后半部分。
实现二分查找(方法递归查找)
public static int binarySearch (int arr[],int from, int to,int key){
if(from<to){ //循环结束条件
int mid=(from/2)+(to/2); //确定中间节点
if(mid==key){ //如果数据找到
return mid ; //取得当前索引
}else if (key<arr[mid]){
return binarySearch(arr,from, mid-1,key);
}else if (key>arr[mid]){
return binarySearch( arr, mid+1,to,key)
}else{
return -1}
}//
}
数组反转
如果程序慢,CPU占量大。算法有问题。
空间占内存!代码有问题,浪费了内存空间。
二维数组转置:行列必须相等
二维转置:中间轴不变(x==y)
for(int x=0;x<arr.length;x++){
for(int y=x;y<arr[x].length;y++){
if(x!=y){
int temp=arr[x][y];
arr[x][y]=arr[y][x];
arr[y][x]=arr[x][y];
}
}
}
数组排序(一般升序):八大排序方法
冒泡法;
求数组,最值,均值,总和。
上述要求一定需要循环
主方法应该越简单越好。
数组的数据类型有局限性,数据类型必须相同
数组排序的方法:Arrays.sort()
数组拷贝:A,B,将B的一段拷贝到A,则A是源
System.arraycopy(源数组名称,源数组拷贝起始坐标,目标数组,目标数字接受起始位置,拷贝长度)