目录
一、数组
1. 概要
- 数组是一组数据的集合
- 数组作为一种引用类型
- 数组元素的类型可以是基本类型,也可以是引用类型,但同一个数组只能是同一种类型
- 数组作为对象,数组中的元素作为对象的属性,除此之外数组还包括一个成员属性 length,length 表示数组的长度
- 数组的长度在数组对象创建后就确定了,就无法再修改了
- 数组元素是有下标的,下标从 0 开始,也就是第一个元素的下标为 0,依次类推最后一个
2. 特点
第一:空间存储上,内存地址是连续的。
第二:每个元素占用的空间大小相同。
第三:知道首元素的内存地址。
第四:通过下标可以计算出偏移量。
3. 优缺点
优点 :检索效率高。
缺点:随机增删效率较低,数组无法存储大数据量。
4. 一维数组的声明及初始化
- 声明
//1. 数组元素的类型[] 变量名称
int [] a;
Student[] stu;
int[] a, b, c;
//2. 数组元素的类型 变量名称[](不常用)
- 初始化
//静态初始化
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. 数组元素的数据类型[][] 变量名;
int [][] data;
//2. 数组元素的数据类型 变量名[][];
- 初始化
//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类
- 概述
第一:字符串一旦创建不可变。
第二:双引号括起来的字符串存储在字符串常量池中。
第三:字符串的比较必须使用equals()方法。
第四:String已经重写了toString()和equals()方法。
- 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数组, 起始下标, 长度);
- 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,将其他类型转换成字符串
- 注意
只要采用双引号赋值字符串,那么在编译期将会放到方法区中的字符串的常量池里,如果是运行时对字符串相加或相减会放到堆中(放之前会先验证方法区中是否含有相同的字符串常量,如果存在,把地址返回,如果不存在,先将字符串常量放到池中,然后再返回该对象的地址)。
因为 String 是不可变对象,如果多个字符串进行拼接,将会形成多个对象,这样可能会造成内存溢出,会给垃圾回收带来工作量,字符串拼接可采用StringBuffer 或 StringBuilder。
2. StringBuffer 与 StringBuilder类
- 概述
StringBuffer 称为字符串缓冲区,它的工作原理是:预先申请一块内存,存放字符序列,如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。StringBuffer 是可变对象,这个是 String 最大的不同。用法同 StringBuffer,StringBuilder 和 StringBuffer 的区别是 StringBuffer 中所有的方法都是同步的,是线程安全的,但速度慢,StringBuilder 的速度快,但不是线程安全的。StringBuffer/StringBuilder可以看做可变长度字符串。
- 用法
StringBuffer sbStr = new StringBuffer();
sbStr.append();
3. 包装类
- 作用
方便编程
- 对应
- 类层次结构
除了 boolean 和 Character 外,其它的包装类都有 valueOf()和 parseXXX 方法,并且还具有byteVaue(),shortVaue(),intValue(),longValue(),floatValue()和 doubleValue()方法,这些方法是最常用的方法。
- 自动装箱与自动拆箱
自动装箱 : 自动将基础类型转换为对象
自动拆箱 : 自动将对象转换为基础类型
//jdk1.5 以前版本,必须按如下方式赋值
Integer i1 = new Integer(100);
//jdk1.5 及以后版本支持
//自动装箱
Integer i2 = 100;
4. 日期类
- 常用日期类
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. 数字类
- 常用数字类
java.text.DecimalFormat 和 java.math.BigDecimal
- 用法
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类型随机数。