1:数组的高级操作(预习)

(1)数组:存储同一种数据类型的多个元素的容器。

(2)特点:每个元素都有从0开始的编号,方便我们获取。专业名称:索引。

(3)数组操作:

A:遍历

public static void printArray(int[] arr) {

for(int x=0; x<arr.length; x++) {

System.out.println(arr[x]);

}

}

B:获取最值

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;

}

C:排序

a:冒泡排序

原理:相邻元素两两比较,大的往后放。第一次完毕,最大值在最大索引处。

public static void bubbleSort(int[] arr) {

for(int x=0; x<arr.length-1; x++) {  //外层循环控制轮数 ,一共要比较(arr.length-1)轮

for(int y=0; y<arr.length-1-x; y++) {  //外层循环控制每一轮比较的次数,每一轮比较(arr.length-1-i)次

if(arr[y] > arr[y+1]) {      //如果前面的元素比后面的元素大,则交换位置

int temp = arr[y];

arr[y] = arr[y+1];

arr[y+1] = temp;

}

}

}

}

注释:冒泡排序原理图

b:选择排序

原理:从0索引元素开始,依次和后面的所有元素比较,小的往0索引处放。

第一次完毕后,最小值在最小索引处。

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;

}

}

}

}

D:查找

a:普通查找

原理:遍历数组,从头找到尾

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;

}

b:二分查找(折半查找)

前提:数组必须是有序的。

原理:每次都从中间开始找,如果比中间数据小,就在左边找,

如果比中间数据大,就在右边找,如果相等,就返回中间的索引值。

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;

}

2: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)  //返回数字在数组中的索引

例子3.demo3

/*
* 从数组当中找到4所在的索引:
* {2,4,6,7,43,57,90,101}
*/
public class Demo3 { public static void main(String[] args) { int[] arr = {2,4,6,7,43,57,90,101};
int number = 10;
System.out.(method(arr, number)); } public static int method(int[] arr,int number){ int start = 0; //定义变量,记录最小的索引
int end = arr.length-1; //定义变量,记录最大的索引
int mid = (start+end)/2; //定义变量,记录中间的索引 while(arr[mid]!=number) { //只要查找的数不等于数组中间的数,就继续查找,如果中间的数等于查找的数,则mid就是要求的索引 if(number<arr[mid]) { //如果这个数比数组中间的数小,则让最大的索引=mid-1
end = mid-1;
}else if(number>arr[mid]) { //如果这个数比数组中间的数大,则让最小的所用=mid+1
start = mid+1;
} if(start>end) { //如果出现最小索引大于最大索引的情况,说明数组中不存在这样的元素
return -1;
} mid = (start+end)/2; //每次循环后,因为首尾的索引变化了,所以中间的索引也需要变化
} return mid; //如果数组中有这个元素,则返回
} }

(3)Arrays工具类的源码。(理解)

3:StringBuffer类(掌握)

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

(2)面试题:

String和StringBuffer的区别?

String的长度固定。

StringBuffer的长度可变。

StringBuffer和StringBuilder的区别?

StringBuffer的线程安全,效率低。

String的线程不安全,效率高。

例子:deme0

/*
* StringBuffer:String的缓冲区,用于提高效率,拼写字符串。
*/
public class Demo { public static void main(String[] args) { int[] arr = {1,2,3,4,5};
String s = ""; for (int i = 0; i < arr.length; i++) {
s += arr[i];
} System.out.println(s);
//循环结束后,创建了6个String对象,但是最终只打印一个对象。浪费了内空间。
} }

(3)StringBuffer的构造方法

A:StringBuffer sb = new StringBuffer();//初始容量默认为16

B:StringBuffer sb = new StringBuffer(int capacity);  //capacity指定初始容量

C:StringBuffer sb = new StringBuffer(String s); //给sb赋值

注意:StringBuilder的功能和StringBuffer一模一样。前者是JDK5以后出现的。

(4)要掌握的功能:(请自己把对应的方法写出来)

A:添加功能 public StringBuffer append(X b) ; public StringBuffer insert(int offset,X b)

B:删除功能 public StringBuffer delete(int start,int end) ; public StringBuffer deleteCharAt(int index)

demo2

/*
* StringBuffer的构造:
* 1:注意:长度与容量不同。
* public StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
* public StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。该字符串的初始容量为 16 加上字符串参数的长度。
* public StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
*
* StringBuffer的普通方法:
* 2:public int capacity() 返回当前对象的容量
* 3:public int length() 返回当前对象的长度,即字符数
* StringBuffer的添加&删除:
* 4:public StringBuffer append(X b) 及其重载 追加任意内容到字符串缓冲区,返回:此对象的一个引用。
* 表示X表示任意类型,注意链式编程。
* 5:public StringBuffer insert(int offset,X b) 将任意参数的字符串表示形式插入此序列中。
* 6:public StringBuffer delete(int start,int end) 删除指定内容 ,包含头,不包含尾
* public StringBuffer deleteCharAt(int index) 删除指定位置字符
*/
public class Demo2 { public static void main(String[] args) { //1,2,3:
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = new StringBuffer("i love java");
StringBuffer sb3 = new StringBuffer(100); System.out.println(sb.capacity());
System.out.println(sb.length());
System.out.println(sb2.capacity());
System.out.println(sb2.length());
System.out.println(sb3.capacity());
System.out.println(sb3.length()); //4:public StringBuffer append(X b) 及其重载 ,追加任意内容到字符串缓冲区,返回:此对象的一个引用。
StringBuffer sb4 = new StringBuffer("i love java");
System.out.println(sb4); // sb4.append(false);
// sb4.append(10);
// sb4.append("巴马学编程");
// sb4.append(1.1);
// sb4.append(new Demo());
// System.out.println(sb4); System.out.println(new StringBuffer("i love java")//链式编程形式
.append(false)
.append(10)
.append("巴马学编程")
.append(1.1)
.append(new Demo2())); //5:public StringBuffer insert(int offset,X b) 将任意参数的字符串表示形式插入此序列中。
StringBuffer sb5 = new StringBuffer("i love java");
System.out.println(sb5); System.out.println(sb5.insert(2, "abcd"));
System.out.println(sb5.insert(2, "abcd").insert(4, "zxcv")); // 6:public StringBuffer delete(int start,int end) 删除指定内容
// public StringBuffer deleteCharAt(int index) 删除指定位置字符
StringBuffer sb6 = new StringBuffer("i love java"); StringBuffer deleteCharAt = sb6.deleteCharAt(0);
System.out.println(deleteCharAt);
//sb6: love java
StringBuffer delete = sb6.delete(0, 5);
System.out.println(delete); //包含头,不包含尾
// java
//只要确定始终为一个对象即可。即sb6与deleteCharAt与delete都是同一个对象
} }

C:其他功能

替换功能 public StringBuffer replace(int start, int end, String str)

截取功能 public String substring(int start); public String substring(int start,int end)

反转功能 public StringBuffer reverse()

转换为String类型  toString();

demo3

/*
* StringBuffer的替换&反转&截取:
* 1:public StringBuffer replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。含头不含尾
* 2:public StringBuffer reverse() 倒过来
* 3:public String substring(int start) 截取,含头不含尾
* public String substring(int start,int end)
* 4:toString()方法被重写了,其作用是:StringBuffer类型的对象不能直接给String类型赋值,需要先转换为String类型
*/
public class Demo3 { public static void main(String[] args) { //1:
StringBuffer sb = new StringBuffer("i love java"); System.out.println(sb.replace(2, 6, "like")); //含头不含尾
System.out.println(sb.replace(2, 6, "lovelovelove")); //2:
StringBuffer sb2 = new StringBuffer("i love java");
System.out.println(sb2.reverse()); //3:
StringBuffer sb3 = new StringBuffer("i love java");
System.out.println(sb3.substring(2));
System.out.println(sb3.substring(2,4)); //含头不含尾 //4:
// String s = sb3; //StringBuffer类型的对象不能直接给String类型赋值,需要先转换为String类型
String s = sb3.toString();
System.out.println(s);
} }

(5)案例:

把一个字符串反转。

public class test{

public static void main(String[] args) {

String s="I love you";

StringBuffer stringBuffer=new StringBuffer(s);

stringBuffer.reverse();

System.out.println(stringBuffer);

}

}

4:基本数据类型包装类(掌握)

(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类的其他方法

public static String toBinaryString(int i)  十进制转成二进制

public static String toHexString(int i)  十进制转成十六进制

public static String toOctalString(int i)  十进制转成八进制

例子3.demo6

/*
* Integer的其他方法:
* public static String toBinaryString(int i) 十进制转成二进制
* public static String toHexString(int i) 十进制转成十六进制
* public static String toOctalString(int i) 十进制转成八进制
*/
public class Demo6 { public static void main(String[] args) { int x = 27; System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toHexString(x));
System.out.println(Integer.toOctalString(x));
} }

(5)Integer的功能

A:String -- int

String s = "100";

int i = Integer.parseInt(s);

B:int -- String

int i = 100;

String s = String.valueOf(i);

(6)JDK5以后的新特性

A:自动装箱 从int--Integer

B:自动拆箱 从Integer--int

请大家解释下面的代码:哪里体现了自动装箱,哪里体现了自动拆箱

Integer i = 100;  //自动装箱

i += 200; //先自定拆箱,再自动装箱

System.out.println(i);

例子3.demo7

/*
* 基本类型包装类:
* 自动装箱拆箱
* 装箱:基本类型>>包装类对象
* 拆箱:包装类对象>>基本类型
*/
public class Demo7 { public static void main(String[] args) { int a = 10;
int b = 20;
System.out.println(a+b); Demo7 demo7 = new Demo7();
Demo7 demo72 = new Demo7();
//System.out.println(demo7+demo72); 引用数据类型不能直接相加
//自动拆箱
Integer i = new Integer(a);
Integer i2 = new Integer(b);
System.out.println(i+i2); //自动装箱
Integer i3 = 10;
Integer i4 = 200; //以下内容做了什么?
Integer x = 1; //自动装箱
x = x + 1; //先拆箱,再装箱 //直接使用引用数据类型计算时,注意空值的问题
Integer i5 = 10;
Integer i6 = null; System.out.println(i5+i6);
} }

注意:

让我们操作变得简单,但是隐含了一个问题,这个时候,我们在使用对象前,最好做不为空的校验。例如:

//直接使用引用数据类型计算时,注意空值的问题

Integer i5 = 10;

Integer i6 = null;

System.out.println(i5+i6); //相加是先自动拆箱,相加时会报空指异常针

(7)面试题:

byte常量池:java虚拟机为了优化8种基本数据类型的包装对象都提供了缓冲池,缓冲池有大小,一个字节。

/*
* java虚拟机为了优化8种基本数据类型的包装对象都提供了缓冲池,缓冲池有大小,一个字节。
*/
public class Demo { public static void main(String[] args) { Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //false Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4); //false Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6); //false
Integer i7 = -127;
Integer i8 = -127;
System.out.println(i7 == i8); //true //1byte = -128~127 }
}

(8)案例:

把字符串"-34 29 76 11 27"中的数据排序并输出。

import java.util.Arrays;
/**
* 把字符串"-34 29 76 11 27"中的数据排序并输出。
*/
public class test3 {
public static void main(String[] args) {
String s = "-34 29 76 11 27";
String[] s2 = s.split(" "); // 按照空格分割字符
int[] a=new int[s2.length]; //存储数字的字符串 for (int i = 0; i < s2.length; i++) {
a[i]=Integer.parseInt(s2[i]); //String[]转int[]
}
Arrays.sort(a); //排序
System.out.println(Arrays.toString(a));//转换成字符串输出
}
}

5、题目

(1)使用StringBuilder/StringBuffer完成将一个数组内内容拼写到一个字符串当中。

/**
* 使用StringBuilder/StringBuffer完成将一个数组内内容拼写到一个字符串当中
*/
public class test {
public static void main(String[] args) {
int[] a={1,2,3,4,5};
StringBuilder stringBuilder=new StringBuilder(); for(int i=0;i<a.length;i++ ){
stringBuilder.append(a[i]);
} String s=stringBuilder.toString();
System.out.println(s);
}
}

(2):以下程序做了什么事?

Integer x = 1; //自动装箱

x = x + 1; //先自动拆箱,再自动装箱

StringBuffer、StringBuilder、冒泡与选择排序、二分查找、基本数据类型包装类_DAY13的更多相关文章

  1. 常见的排序算法(直接插入&选择排序&二分查找排序)

    1.直接插入排序算法 源码: package com.DiYiZhang;/* 插入排序算法 * 如下进行的是插入,排序算法*/ public class InsertionSort {    pub ...

  2. 基于python语言的经典排序法(冒泡法和选择排序法)

    前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...

  3. UVA.10474 Where is the Marble ( 排序 二分查找 )

    UVA.10474 Where is the Marble ( 排序 二分查找 ) 题意分析 大水题一道.排序好找到第一个目标数字的位置,返回其下标即可.暴力可过,强行写了一发BS,发现错误百出.应了 ...

  4. Java基础【冒泡、选择排序、二分查找】

    冒泡排序的思路就是前一个和后一个进行比较,如果大的就交换位置   大的数字后浮 如   12      8    5     31 第一轮   8   5   12   31 第二轮   5   8 ...

  5. java中级——二叉树比较冒泡和选择排序

    上次我们说到二叉树排序比较,给出如下的题目 题目:创建五万个随机数,然后用分别用冒泡法,选择法,二叉树3种排序算法进行排序,比较哪种更快 废话不说直接上源码,可以看控制台结果 注意的是 需要我们需要上 ...

  6. python基础:冒泡和选择排序算法实现

    冒泡排序和选择排序   首先引用一下百度百科对于冒泡算法的定义:   冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾 ...

  7. java面试准备之基础排序——冒泡与选择排序

    选择排序:     [java]    public void select(int[] arr){            for(int i=0;i<arr.length;i++){      ...

  8. [c/c++] programming之路(14)、数组+冒泡和选择排序

    一.数组的基本知识 #include<stdio.h> #include<stdlib.h> void main0(){ ]={,,,,};//数组在内存里是连续排列的 int ...

  9. AJPFX:学习JAVA程序员两个必会的冒泡和选择排序

    * 数组排序(冒泡排序)* * 冒泡排序: 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处* * 选择排序 : 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现 ...

随机推荐

  1. java中的四种修饰符:private、protected、public和default的区别

      本类 本包 子类 包外 public 可以 可以 可以 可以 protected 可以 可以 可以 不可以 default 可以 可以 不可以 不可以 private 可以 不可以 不可以 不可以 ...

  2. mysql 查询中文字段 没有结果的解决方法

    代码如下: $conn = new mysqli('localhost', 'root', '', 'excel');$sql = "select 中信一级行业 from excel gro ...

  3. 几种修改Linux主机名的方法

    在安装一些系统时,需要修改hostname,比如安装Hadoop时需要修改主机名,而且主机名不能包含下划线. 实际上,主机名分三种(命令hostnamectl或hostnamectl status可查 ...

  4. 20145232 韩文浩 《Java程序设计》第3周学习总结

    教材学习内容总结 在第三章中,知道了Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型.在这一周主要学习了类类型. 对象(Object):存在的具体实体,具有明确的状态和行为 类( ...

  5. (概率 01背包) Just another Robbery -- LightOJ -- 1079

    http://lightoj.com/volume_showproblem.php?problem=1079 Just another Robbery As Harry Potter series i ...

  6. C++ 中的continue理解

    continue的在循环中的作用: 1. 跳过当前循环,但是还需要执行自增条件, 如下程序:当i == 3时,执行i++, 即if判定{}执行完毕,则i==4, 然后 for最后一条语句i++, 然后 ...

  7. iscroll 4 下拉 上拉 加载

    <!DOCTYPE html> iScroll demo: barebone body, ul, li{ padding:0; margin: 0; border:0; } body{ f ...

  8. Git的一些资源链接

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  9. tensorflow 安装命令

    sudo pip install --upgrade --ignore-installed six tensorflow-0.9.0-py2-none-any.whl

  10. C#调用接口注意要点

    在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存cookie值,再进行其他接 ...