数组、String、Stringbuilder、StringBuffer
数组的定义
--数组是相同类型数据的有序集合。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。
数组的四个基本特点:
--其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
--其元素必须是相同类型,不允许出现混合类型。
--数组中的元素可以是任何数据类型,包括基本类型和引用类型。
--数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量,默认值跟成员变量的规则一样。数字0,布尔false,char\u0000,引用:null。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
创建数组和初始化
声明:
--数据类型[] 数组名 = new 数据类型[数组的长度];
--数据类型[] 数组名 = new 数据类型[]{元素值1,元素值2,...};
--数据类型[] 数组名 = {元素值1,元素值2,...};
注:--声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。因此,声明数组时不能指定其长度(数组中元素的个数),例如: int a[5]; //非法
--声明一个数组的时候并没有数组被真正的创建。
--构造一个数组,必须指定长度。
创建数组:
--静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。例如:int[] a = {1,2,3};
--动态初始化
数组定义与为数组元素分配空间并赋值的操作分开进行。例如:int[] a = new int[2];a[0] = 1;a[1] = 2;
--数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
String(不可变 Unicode 字符序列)
--private final char value[];
--Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的。
字符串相等的判断
s.equals(t)
--注意:s和t既可以是字符串变量,也可以是字符串常数,例如: “Hello”.equals(t)。
--判断字符串是否相等不要使用“==”。
String 类常用方法
--下列方法创建并返回一个新的String对象: concat, replace, substring, toLowerCase, toUpperCase, trim。
--提供查找功能的有关方法: endsWith, startsWith, indexOf,,lastIndexOf。
--提供比较功能的方法: equals, equalsIgnoreCase, compareTo。
--其它方法: charAt ,length。
--public static String valueOf(…)可以将基本类型数据转换为字符串。
StringBuilder(可变字符序列,线程不安全,效率高,推荐使用)
--char[] value;
StringBuffer(可变字符序列,线程安全,效率低,不推荐使用)
--char[] value;
数组序排好了,查询方便,添加修改删除不方便。
StringBuilder 与StringBuffer的区别,StringBuilder与String的区别。
--StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。
--String是不可变字符串,StringBuilder是可变字符串。为什么有这样的差异,可以深入源码去解析,比如String类内的 priver final char value[] 等方法的原因。
--如果是简单的声明一个字符串没有后续过多的操作,使用String,StringBuilder均可,若后续对字符串做频繁的添加,删除操作,或者是在循环当中动态的改变字符穿的长度应该用StringBuilder。使用String会产生多余的字符串,占用内存空间。
二分法查找
1 int[] a = {1,2,323,23,543,12,59}; 2 Arrays.sort(a); //使用二分法查找,必须先对数组进行排序 3 System.out.println("该元素的索引:"+Arrays.binarySearch(a, 12));
复制
1 System.arraycopy(src, srcPos, dest, destPos, length); //一般使用
填充
1 Arrays.fill(a, 2, 4, 100); //将2到4索引的元素替换为100
asList
1 int[] a = {1,2,323,23,543,12,59}; 2 List<int[]> list = new ArrayList<int[]>(); 3 list = Arrays.asList(a); //将数组转成成list对象中的一个元素 4 System.out.println(list.get(0)[1]);
private final char value[]