Java学习(六) --------- 数组和常用类


一、数组

1. 概要

  1. 数组是一组数据的集合
  2. 数组作为一种引用类型
  3. 数组元素的类型可以是基本类型,也可以是引用类型,但同一个数组只能是同一种类型
  4. 数组作为对象,数组中的元素作为对象的属性,除此之外数组还包括一个成员属性 length,length 表示数组的长度
  5. 数组的长度在数组对象创建后就确定了,就无法再修改了
  6. 数组元素是有下标的,下标从 0 开始,也就是第一个元素的下标为 0,依次类推最后一个

2. 特点

第一:空间存储上,内存地址是连续的。
第二:每个元素占用的空间大小相同。
第三:知道首元素的内存地址。
第四:通过下标可以计算出偏移量。

3. 优缺点

优点 :检索效率高。
缺点:随机增删效率较低,数组无法存储大数据量。

4. 一维数组的声明及初始化

  1. 声明
//1. 数组元素的类型[] 变量名称
int [] a;
Student[] stu;
int[] a, b, c;
//2. 数组元素的类型 变量名称[](不常用)

  1. 初始化
//静态初始化
int[] arr = {1,2,3,4};
Object[] objs = {new Object(), new Object(), new Object()};

//动态初始化
int[] arr = new int[4]; // 4个长度,每个元素默认值0
Object[] objs = new Object[4]; // 4个长度,每个元素默认值null

5. 一维数组遍历

for(int i = 0; i < arr.length; i++) {
	System.out.println(arr[i]);
}

6. 二维数组的声明及初始化

  1. 声明
//1. 数组元素的数据类型[][] 变量名;
int [][] data;
//2. 数组元素的数据类型 变量名[][];
  1. 初始化
//1.静态初始化
int[][] arr = {
		{1,2,34},
		{54,4,34,3},
		{2,34,4,5}
};

Object[][] arr = {
		{new Object(),new Object()},
		{new Object(),new Object()},
		{new Object(),new Object(),new Object()}
};
//2.动态初始化
int[][] arr = new int[3][4];
Object[][] arr = new Object[4][4];
Animal[][] arr = new Animal[3][4];
// Person类型数组,里面可以存储Person类型对象,以及Person类型的子类型都可以。
Person[][] arr = new Person[2][2];

7. 二维数组的遍历

for(int i = 0; i < arr.length; i++){ // 外层for循环负责遍历外面的一维数组。
	 // 里面这个for循环负责遍历二维数组里面的一维数组。
	for(int j = 0; j < arr[i].length; j++){
		System.out.print(arr[i][j]);
	}
	 // 换行。
	System.out.println();
}

8. 数组的拷贝

调用System.arraycopy()方法; 
//用法  
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 

数组有一个特点:长度一旦确定,不可变。所以数组长度不够的时候,需要扩容,扩容的机制是:新建一个大数组,将小数组中的数据拷贝到大数组,然后小数组对象被垃圾回收。

9. Arrays工具类

java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。

常用方法

Arrays.sort();//排序
Arrays.binarySearch();//二分查找

二、常用类

1. String类

  1. 概述

第一:字符串一旦创建不可变。
第二:双引号括起来的字符串存储在字符串常量池中。
第三:字符串的比较必须使用equals()方法。
第四:String已经重写了toString()和equals()方法。

  1. String类的构造方法

String s = “abc”;
String s = new String(“abc”);
String s = new String(byte数组);
String s = new String(byte数组, 起始下标, 长度);
String s = new String(char数组);
String s = new String(char数组, 起始下标, 长度);

  1. String类的常用方法
4. endsWith:判断字符串是否以指定的后缀结束
5. startsWith,判断字符串是否以指定的前缀开始
6. equals,字符串相等比较,不忽略大小写
7. equalsIgnoreCase,字符串相等比较,忽略大小写
8. indexOf,取得指定字符在字符串的位置
9. lastIndexOf,返回最后一次字符串出现的位置
10. length,取得字符串的长度
11. replaceAll,替换字符串中指定的内容
12. split,根据指定的表达式拆分字符串
13. substring,截子串
14. trim,去前尾空格
15. valueOf,将其他类型转换成字符串
  1. 注意

只要采用双引号赋值字符串,那么在编译期将会放到方法区中的字符串的常量池里,如果是运行时对字符串相加或相减会放到堆中(放之前会先验证方法区中是否含有相同的字符串常量,如果存在,把地址返回,如果不存在,先将字符串常量放到池中,然后再返回该对象的地址)。

因为 String 是不可变对象,如果多个字符串进行拼接,将会形成多个对象,这样可能会造成内存溢出,会给垃圾回收带来工作量,字符串拼接可采用StringBuffer 或 StringBuilder。

2. StringBuffer 与 StringBuilder类

  1. 概述

StringBuffer 称为字符串缓冲区,它的工作原理是:预先申请一块内存,存放字符序列,如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。StringBuffer 是可变对象,这个是 String 最大的不同。用法同 StringBuffer,StringBuilder 和 StringBuffer 的区别是 StringBuffer 中所有的方法都是同步的,是线程安全的,但速度慢,StringBuilder 的速度快,但不是线程安全的。StringBuffer/StringBuilder可以看做可变长度字符串。

  1. 用法
StringBuffer sbStr = new StringBuffer();
sbStr.append();

3. 包装类

  1. 作用

方便编程

  1. 对应

  1. 类层次结构

在这里插入图片描述

除了 boolean 和 Character 外,其它的包装类都有 valueOf()和 parseXXX 方法,并且还具有byteVaue(),shortVaue(),intValue(),longValue(),floatValue()和 doubleValue()方法,这些方法是最常用的方法。

  1. 自动装箱与自动拆箱

自动装箱 : 自动将基础类型转换为对象
自动拆箱 : 自动将对象转换为基础类型

//jdk1.5 以前版本,必须按如下方式赋值
Integer i1 = new Integer(100);
//jdk1.5 及以后版本支持
//自动装箱
Integer i2 = 100;

4. 日期类

  1. 常用日期类
java.util.Date;
java.text.SimpleDateFormat;
java.util.Calendar;

2 . 用法

①获取系统当前时间

Date d = new Date();

②日期格式化

yyyy-MM-dd HH:mm:ss SSS
SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss SSS");
String s = sdf.format(new Date());

③String类型转化为date类型

SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2008-08-08 08:08:08");

④获取毫秒数

long begin = System.currentTimeMillis();
Date d = new Date(begin - 1000 * 60 * 60 * 24);

5. 数字类

  1. 常用数字类

java.text.DecimalFormat 和 java.math.BigDecimal

  1. 用法

1、DecimalFormat数字格式化
###,###.## 表示加入千分位,保留两个小数。
###,###.0000 表示加入千分位,保留4个小数,不够补0
2、BigDecimal
财务软件中通常使用BigDecimal

DecimalFormat df = new DecimalFormat("###,###.##");
System.out.println(df.format(1234.23452));

BigDecimal v1 = new BigDecimal(10);
BigDecimal v2 = new BigDecimal(20);
//相加运算
BigDecimal v3 = v1.add(v2);

6. 枚举类

概述

1、枚举是一种引用数据类型。
2、枚举编译之后也是class文件。
3、枚举类型怎么定义?
enum 枚举类型名{
枚举值,枚举值2,枚举值3
}
4、当一个方法执行结果超过两种情况,并且是一枚一枚可以列举出来的时候,建议返回值类型设计为枚举类型。

7. Random类

用法

import java.util.Random;
Random r = new Random();
int i = r.nextInt();//产生int类型随机数

int j = r.nextInt(101); // 产生某个范围之内的int类型随机数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值