------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
----------------java之----数组------------------
数组就是数字的集合
1.创建一维数组的方法
int[] a = new int[4];------------int a[] = new int[4];
int[] a = {1, 15, 26};-------------int a[] = {1, 15, 26};
int[] a= new int[4]{1,2,3,4};
2.数组中常见的两个异常:
System.out.println(arr[3]);//ArrayIndexOutOfBoundsException: //当访问到数组中不存在的角标时,就会发生该异常。
arr = null;
System.out.println(arr[0]);//NullPointerException
//当引用型变量没有任何实体指向时,还在用其操作实体。就会发生该异常。
3.按相反的顺序输出
public class Demo {
public static void main(String[]args){
int[] row={30,31,32,33,34,35,36,37,38,39};
System.out.println("\n入场顺序为:");
for(int i=0;i<row.length;i++){
System.out.print(" 第七排"+row[i]+"号");
if((i+1)%5==0)
System.out.println();
}
System.out.println("\n出场顺序为:");
for(int i=row.length-1;i>=0;i--){
System.out.print(" 第七排"+row[i]+"号");
if(i%5==0)
System.out.println();
}
}
}
4.插入新的元素
public class Demo{
public static void main(String[] args) {
av();
}
public static void av() {
int i, j;
int n = 5;
int av[] = new int[n + 1];//定义av数组
for (i = 0; i < av.length - 1; i++) {
av[i] = i + (1 + 2 * i);//赋值
}
int length = av.length;//定义数组长度变量
System.out.println("插入元素前的数组为:");
for (i = 0; i < av.length; i++) {
if (av[i] == 0) {//对数组取值
System.out.print(" ");
} else {
System.out.print(av[i] + " ");
}
}
System.out.println();//换行
System.out.println("请输入一个数字:");
Scanner sc = new Scanner(System.in);
int pp = sc.nextInt();//定义一个变量pp,从键盘接受数字
for (i = 0; i < av.length - 1; i++) {
if (av[i] > pp)//键盘接收数字与数组中数字比较
break; //得到比pp大的数字下标i
}
for (j = av.length - 1; j > i; j--) {
av[j] = av[j - 1];//将比pp大的数字,下标往后挪一
}
av[i] = pp;
System.out.println("将" + pp + "插入数组后,该数组为");
for (i = 0; i < length; i++) {
System.out.print(av[i] + " ");
}
}
}
5.复制数组
public class Demo {
public static void main(String[] args){
vb();
}
public static void vb(){
int copy1[]=new int[]{12,23,45,65,23,45,45,12,32};
int copy2[]=new int[copy1.length];
System.out.println("数组copy1的元素为:");
for(int i=0;i<copy1.length;i++){
System.out.print(copy1[i]+" ");
if((i+1)%4==0)
System.out.println();
}
System.arraycopy(copy1, 0, copy2, 0, copy2.length);
System.out.println("\n数组copy2的元素为:");
for(int i=0;i<copy1.length;i++){
System.out.print(copy1[i]+" ");
if((i+1)%4==0)
System.out.println();
}
}
}
6。输出元素下标
import java.util.Arrays;
public class SearchDemo {
public static void main(String[] args) {
int[] num = { 112, 23, 323, 42, 51, 7, 73 };
Arrays.sort(num, 4, 10);// 第4个下标到第10个下标(不包括第10)进行递增排序
Arrays.sort(num); // 从小到大排序
for (int n : num) { // 输出
System.out.print(n + " ");
}
int m = Arrays.binarySearch(num, 7); // 数组中元素为7的下标位置,如果7是多个则下标随机
System.out.println("\n" + m);
}
}
7.奇偶分组并交替输出
import java.util.Random;
public class Demo{
public static void main(String[]args){
Random ra=new Random();
int total[]=new int[30];
int even[]=new int[30];
int odd[]=new int[30];
int j=0,k=0;
System.out.println("总数组total的元素如下:");
for(int i=0;i<total.length;i++){
total[i]=ra.nextInt(100);
if(total[i]%2==0){
odd[j]=total[i];
j++;
}else{
even[k]=total[i];
k++;
}
System.out.print(" "+total[i]);
if((i+1)%5==0){
System.out.println();
}
}
System.out.println("\n 奇偶交替输出:");
int max=j>k?j:k;
int min=j>k?k:j;
for(int x=0;x<max;x++){
if(x>=min && j==min){
System.out.print(" "+even[x]);
}else if(x>=min && k==min){
System.out.print(" "+odd[x]);
}else if(x<min){
System.out.print(" "+odd[x]+","+even[x]);
}
if((x+1)%5==0){
System.out.println();}
}
}
}
8.冒泡排序
public class Demo {//也叫选择排序
public static void main(String[]args){
int av[]={54,12,847,45};
for(int i=0;i<av.length;i++){
System.out.print(" "+av[i]);
if((i+1)%5==0)
System.out.println();
}
int vt;
for(int i=0;i<av.length;i++){
for(int j=i;j<av.length;j++){
if(av[j]<av[i]){//比较大小,0下标与1下标比较
vt=av[i]; //把大的付给一个变量
av[i]=av[j];//位置互换,把小的放到前面即0下标
av[j]=vt; //把大的付给数组中后面,即1下标
}
}
}
System.out.println("冒泡排序后为:");
for(int i=0;i<av.length;i++){
System.out.print(" "+av[i]);
if((i+1)%5==0)
System.out.println();
}
}
}
二维数组-----------------
9,创建:1------int [][]nums={ {23,67,34}, {34,67,56},{6,17} };
2----------int [][]nums=new int[3][4];//定义3行4列
3---------int [][]nums=new int[][]{ {2,3,4,5}, {33,44,22,55},{3,45,6,4} };
10.矩阵转置(行列互换)
public class Demo {// 行列互换
public static void main(String[] args) {
int av[][] = { { 1, 2, 3 }, { 7, 8, 44 }, { 4, 56, 87 }, { 54, 12, 45 } };// 定义数组
int vt[][] = new int[3][4];// 定义空数组
System.out.print("元型矩阵如下:\n");
for (int i = 0; i < av.length; i++) {
for (int j = 0; j < av[i].length; j++) {
System.out.print(av[i][j] + " ");
}// 遍历原数组
System.out.println();
}
for (int i = 0; i < av.length; i++) {
for (int j = 0; j < av[i].length; j++) {
vt[j][i] = av[i][j];// 将行列互换
}
}
System.out.print("\n转型后矩阵如下:\n");
for (int i = 0; i < vt.length; i++) {
for (int j = 0; j < vt[i].length; j++) {
System.out.print(vt[i][j] + " ");
}// 遍历输出新数组
System.out.println();
}
}
}
11.数组的定义:数组是相同类型数据的集合,描述的是相同类型的若干个数据按照一定的先后顺序排列组合而 成,其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。
12,数组的四个基本特点:
1.长度固定,一旦被创建它的长度就是不可改变的;
2.其元素类型必须是相同类型,不允许出现混合类型;
3.数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型;
4.数组变量属于引用类型,数组也可以看做是对象,数组中的每个元素相当于该对象的成员变量,数组本 身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组本身是在堆中 13.常用方法
数组的下标合法区间是[0,length-1]。
数组的拷贝:System.arrayCopy(源数组,从哪开始,目标数组,从哪开始贴,粘几个)。
数组排序:Arrays.sort(被排序的数组)。
二分法查找:Arrays.binarySearch(哪个数组,数组中的什么元素)。
填充:Arrays.fill(a, 2, 4, 100)。//将数组a中2到4的索引的元素替换为100
获取数组的长度:数组.length,如a.length,获取数组a的元素个数;a[0].length,表示获取二维数组中第一个数组的长度
----------------Java之------字符串--------------------
1.创建:----------------------------------------------
1,使用new关键字创建字符串,String str = new String("abc");
2,直接指定。String str= "abc";
3,使用串联生成新的字符串。String str = "ab" + "c";
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字串。
因为 String 对象是不可变的,所以可以共享字符串;
关于字符串的创建说明一下。字符串和数字一样都存在于常量池中。并且池中的字符串的内容不重复 。注意,当使用任何方式来创建一个字符串对象时,会有个编译期,
2.注意:------------面试题---------------------------------
1.---------String str = new String("xy");创建了几个对象
----------------两个,一个是对象,一个是对象的引用 。
2. String str ="ab"+"c";创建了几个对象
--------------一个对象
3.String str0 ="ab";
String str1 ="c";
String str2 ="abc";
String str3 ="abc";
( 1 ) System.out.println(str2==str3);//true
2,3 -> 根据String的概念他们都指向了同一个缓冲池内的地址,所以结果true
String str4="ab"+"c";
(2)System.out.println(str2==str4);//true
2,4 -> 相加的两个为常量,所以编译器会把s5优化为abc,所以结果也为true
String str5=new String("abc");
(3)System.out.println(str2==str5);//false//创建对象开辟内存
5指向的是新分配的地址空间所以与缓冲池地址不同,所以为false。
String str6=str0+"c";
(4)System.out.println(str2==str6);//false
因为有变量所以编译器无法优化,在运行时,会有新的String地址空间的分配,而不是指向缓冲池中所以结果false。
final String str7 ="ab";
final String str8 ="c";
String str9=str7+str8;
(5)System.out.println(str2==str9);//true
因为是final类型编译器进行了优化所以相同。
注意原理:--------重点------------------
原理1:当使用任何方式来创建一个字符串对象时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串,否则,不在池中添加。
原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。
原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。
原理4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。
3.public class Demo {
public static void main(String[] args) {
String st = " ghgsdhdsghsgdhsgdhsgh ";
String st1 = "Khgsdhdsghsgdhsgdhsgh";
char ch = st.charAt(3);
// 截取第三个下标字符
int len = st.length();
// 字符串的长度
char buf[] = new char[20];
// 截取一段字符串
st.getChars(6, 10, buf, 0);
// void getChars(int s1,int s2,char t1[],int t2)
// s1指定了子串开始字符的下标,s2指定了子串结束后的下一个字符的下标。
// 因此,子串包含从s1到s2-1的字符。 接收字符的数组由t1指定,t1中开始复制子串的下标值是t2。
int n = st.compareTo(st1);
int n1 = st.compareToIgnoreCase(st1);
// 比较字符串
st = st.concat(st1);
// 将st1追加到st的后面,首尾相连
System.out.println(st.equals(st1));
// equals前后两个字符串是否相等,考虑大小写
System.out.println(st.equalsIgnoreCase(st1));
// equals前后两个字符串是否相等,不考虑大小写
int m1 = st.indexOf(ch);
// 从前向后 定位char ch 第一次出现的位置
int m2 = st.indexOf(ch, 4);
// 从前向后 定位 char ch 从第4个字符串开始
String st3 = st.replace("d", "h");
// 替换指定字符
String av = "我,喜欢,你,你,喜,欢,我,吗";
String[] av1 = av.split(",");
// 以标记分割
String[] av2 = av.split(",", 5);
// 分割成5分
String sub1 = st.substring(12);
// 包括第12个下标,截取12及以后下标字符
String sub2 = st.substring(0, 10);
// 不包括第十个下标
char[] av3 = st.toCharArray();
// 分解字符串
System.out.println("小写转大写" + st.toUpperCase());
System.out.println("大写转小写" + st1.toLowerCase());
String st4 = st.trim();
// 去除前后空格
char ch4[] = { '大', '家', '新', '年', '好' };
String st5 = String.valueOf(true);// boolen
String st6 = String.valueOf('我');// char
String st7 = String.valueOf(ch);// char ch[]
String st8 = String.valueOf(3.212333);// double
String st9 = String.valueOf(9.89978f);// float
String st10 = String.valueOf(10);// int
String st11 = String.valueOf(7847387878l);// long
String st12 = String.valueOf(ch4, 1, 3);// (char ch[],1,3)
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
String st13 = String.valueOf(st5);// object
System.out.println(st10);
System.out.println(st11);
System.out.println(st12);
System.out.println(st13);
System.out.println(st9);
System.out.println(st5);
System.out.println(st6);
System.out.println(st7);
System.out.println(st8);
// 把其他类型转换为String类型
}
}