2020-07-10

part 1.1.1 数组的使用

  1. 数组动态初始化:
    声明并开辟数组:实例化
    数据类型 [] 数组名称 = new 数据类型[长度];

数组的访问通过索引完成,即:数组名称[索引],数组的索引从0开始,所以索引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生java.lang.ArrayIndexOutOfBoundsException 异常信息;

当我们数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值;
数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一个有限的数据集合,所以应该使用 for 循环。
在 Java 中提供有一种动态取得数组长度的方式:数组名称.length;
定义一个int型数组
public class ArrayDemo {
public static void main(String args[]) {
int data[] = new int[3]; /开辟了一个长度为3的数组/
data[0] = 10; // 第一个元素
data[1] = 20; // 第二个元素
data[2] = 30; // 第三个元素
for(int x = 0; x < data.length; x++) {
System.out.println(data[x]); //通过循环控制索引
}
}
}

采用分步的模式开辟数组空间
public class ArrayDemo {
public static void main(String args[]) {
int data[] = null;
data = new int[3]; /开辟了一个长度为3的数组/
data[0] = 10; // 第一个元素
data[1] = 20; // 第二个元素
data[2] = 30; // 第三个元素
for(int x = 0; x < data.length; x++) {
System.out.println(data[x]); //通过循环控制索引
}
}
}

数组属于引用数据类型,所以在数组使用之前一定要开辟控件(实例化),如果使用了没有开辟空间的数组,则一定会出现 NullPointerException 异常信息:
数组引用传递: 同一块堆内存空间可以被不同的栈内存所指向。
判断值变化情况一定要区分值传递还是引用传递

  1. 数组静态初始化
    在之前所进行的数组定义都有一个明显特点:数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。

数组的静态初始化一共分为以下两种类型:
简化格式: 数据类型 数组名称 = {值, 值,…}
完整格式: 数据类型 数组名称 = new 数据类型[] {值, 值,…}——便于匿名数组使用: 匿名数组:在栈内存中没有任何引用,只在堆内存开辟空间,存放数据

数组最大的缺陷:长度固定。

二维数组
一维数组利用一个索引就可以进行访问,是一个数据行的概念。
二维数组本质上指的是行列集合,“数组名称[行索引][列索引]”,所以这样的结构就是一个表的结构。

那么对二维数组的定义有两种声明形式:
数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];
数组的静态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数]{{值, 值,…}, {值, 值,…},…};
数组的数组就是二维数组。
定义一个二维数组
public class ArrayDemo {
public static void main(String args[]) {
//此时的数组并不是一个等列数组
int data[][] = new int[][] {
{1, 2, 3}, {4, 5}, {6, 7, 8, 9}};
//如果在进行输出的时候一定要使用双重循环,
//外部的循环控制输出的行数,而内部的循环控制输出列数
for(int i = 0; i < data.length; i++) {
for(int j = 0; j < data[i].length; j++) {
System.out.print(“data[” + i + “][” + j + “]=” + data[i][j] + “、”);
}
System.out.println();
}
}
}

  1. 常用数组类:

Array
Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据。
Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据。
List
List—是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。
List是一个接口,不能写成如下:List list = new List();//错误
List有两个重要的实现类:ArrayList和LinkedList
ArrayList
可以看作是能够自动增长容量的数组;
LinkedList
是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.
eg.
要求从控制台接收用户输入的一个字母,如果这个字母是小写,转换为大写;如果这个字母是大写,转换为小写;只能输入字母,如果是其他值,提示数据有误!
import java.util.Scanner;
public class WordChange {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println(“请输入您需要转换的字母:”);
char c = input.next().charAt(0);
change©;
}
private static void change(char c) {
//如果输入的是大写,+32即可得到小写
if(c>=‘A’ && c<=‘Z’){
c+=32;
System.out.println(“您输入的大写字母”+(char)(c-32)+“被转换成了”+c);
}else if(c>=‘a’ && c<=‘z’){ //如果输入的是小写,-32即可得大小写
c-=32;
System.out.println(“您输入的小写字母”+(char)(c+32)+“被转换成了”+c);
}else{
System.out.println(“输入的字符有误!!”);
}
}
}
——————字符char采用的是Unicode编码的16位字符类型,其表示范围是0-65536。标准的8位ASCII字符集是Unicode 的子集,其取值范围为0-127。大小写字母之间正好相差32

java实现统计字符串中大写字母,小写字母及数字出现次数
public class TestSubstring {
public static void main(String[] args) {
getCount(“adsJKJ3K21AfaAD134F13241d134134s141faAAFDF”);
}
//统计字符串中,大写字母,小写字母,数字出现的次数
public static void getCount(String str) {
int upper = 0;
int lower = 0;
int digi = 0;
for (int i = 0, len = str.length(); i < len; i++) {
char c = str.charAt(i);
if (c >= ‘A’ && c <= ‘Z’) {
upper++;
} else if (c >= ‘a’ && c <= ‘z’) {
lower++;
} else if (c >= ‘0’ && c <= ‘9’) {
digi++;
}
}
System.out.println(“大写字母:” + upper); //大写字母:13
System.out.println(“小写字母:” + lower); //小写字母:9
System.out.println(“数字:” + digi); //数字:20
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值