JAVA集合框架中的工具类-Arrays
Arrays这个工具类是静态的
为什么会有Arrays这个工具类呢?
因为:数组本身自己的方法就只有length
这个我觉得算是扩展数组的方法吧…
Arrays中具体的方法: 二分查找
,复制指定的数组长度
,返回指定数组的内容的字符串表示形式比较两个数组彼此是否深度相等
,指定数组的深度内容(哈希值)
,比较两个数组是否相等
,将数组里面的内容全部替换
,根据数组内容返回哈希值
,排序
等…
具体的还得去看一下API
这里举个例子:
假如我们要输出数组的里面的内容
public class Demo {
public static void main(String[] args) {
String[] str = {"aaa", "bbb", "ccc"};
System.out.println(str);
}
}
运行结果:
假设我们自己实现的话…
例子:
public class Demo {
public static void main(String[] args) {
String[] str = {"aaa", "bbb", "ccc"};
myToString(str);
}
public static void myToString(String[] str) {
System.out.print("[");
for(int i = 0; i < str.length-1; i++) {
System.out.print(str[i]+", ");
}
System.out.print(str[str.length-1]+"]");
System.out.println();
}
}
运行结果:
其实我们可以使用Arrays
这个工具类(虽然这个方法能自己实现,但是直接调用它不香吗)
例子:
public class Demo {
public static void main(String[] args) {
String[] str = {"aaa", "bbb", "ccc"};
System.out.println(Arrays.toString(str));
}
}
运行结果:
看了一下toString里面方法源码很经典所以这里也分享一下吧:
public static String toString(Object[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(String.valueOf(a[i]));
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
以后如果自己写toString方法的话可以这样类似的写
toString的经典实现
例子:
public static String myToString(int[] a) {
int iMAX = a.length - 1;
if(iMAX == 0) {
return "[]";
}
StringBuilder b = new StringBuilder();
b.append("[");
for(int i = 0; ; i++) { //中间省略条件判断,提高了效率
b.append(a[i]);
if(i == iMAX) {
return b.append("]").toString();
}
b.append(", ");
}
}
Arrays方法里面有一个把数组转换成List集合
的方法–asList()
重点: List asList(数组)将数组转换为集合.
好处: 可以使用集合的方法操作数组中的元素
注意: 数组的长度是固定的,所以对于集合的增删方法是不可以使用的
否者会发生UnsupportedOperationException
例子:
import java.util.Arrays;
import java.util.List;
public class Demo {
public static void main(String[] args) {
String[] str = {"aaa", "bbb", "ccc"};
List list = Arrays.asList(str);
boolean b = list.contains("aaa"); //判断是否集合中是否有aaa
System.out.println("b = "+b);
}
}
运行结果:
我们自己实现也可以
例子:
public class Demo {
public static void main(String[] args) {
String[] str = {"aaa", "bbb", "ccc"};
boolean b =myContains(str, "bbb");
System.out.println("b = "+b);
}
public static boolean myContains(String[] str, String key) {
for(int i = 0; i < str.length; i++) {
if(str[i].equals(key)) {
return true;
}
}
return false;
}
}
运行结果:
自己可以实现,但是还是觉得有得直接用还是直接用更香…
注意:
如果数组中的元素是对象, 那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储
如果数组中的元素是基本数据类型数值, 那么会将该数组作为集合中的元素进行存储
例子:
public class Demo {
public static void main(String[] args) {
int[] arr = {31, 11, 51, 61};
List list = Arrays.asList(arr);
System.out.println(list);
}
}
运行结果:
List list = Arrays.asList(arr);
//其实就是
List<int[]> list = Arrays.asList(arr);