Java数组的运用详解
一,数组的含义:
一维数组:相同数据类型的元素的集合。
二位数组:存放数组的数组,也就是说数组里存的还是数组的数据形式。
二,数组的创建
一维数组
1,动态初始化
数据类型[] 数组名 = new 数据类型[数组长度];
例:int[] a = new int[5];
2,静态初始化
数据类型[] 数组名 = {数组0,数组1,数组2,数组3,…};
例:int[] b = new int[]{1,2,3,4,5};
数据类型[] 数组名 = {数组0,数组1,数组2,数组3,…};
例:int[] c = {1,2,3,4,5}
二位数组
数据类型[][] 数组名 = {数组1,数组2,…};
例:int[][] a = {{3,5},{7,9},{1,2}};
三,数组遍历
一维数组遍历
int [] arr={1,2,3,4,5};
for(int a = 0; a < arr.length; a++){
System.out.print(arr[a]);
}
运行结果:
12345
Arrays工具类中toString静态方法遍历
int [] arr={1,2,3,4,5};
System.out.print(Arrays.toString(arr));
运行结果:
[1, 2, 3, 4, 5]
二维数组遍历
int Arr[][]={{5,7,15},{8,4,11},{3,6,13}};
for (int i = 0; i < Arr.length; i++) {
for (int j = 0; j < Arr[i].length; j++) {
System.out.print(Arr[i][j]+" ");
}
}
运行结果:
5 7 15 8 4 11 3 6 13
Arrays工具类中deepToString静态方法遍历
int b[][]={{5,7,15},{8,4,11},{3,6,13}};
System.out.println(Arrays.deepToString(b));
运行结果:
[[5, 7, 15], [8, 4, 11], [3, 6, 13]]
四,Arrays.deepToString()与Arrays.toString()的区别
Arrays.deepToString()主要用于数组中还有数组的情况,而Arrays.toString()则相反,对于Arrays.toString()而言,当数组中有数组时,不会打印出数组中的内容,只会以地址的形式打印出来。
例:
int a[][]={{5,7,15},{8,4,11},{3,6,13}};
System.out.println(Arrays.toString(a));
int b[][]={{1,2,3},{8,4,11},{3,6,13}};
System.out.println(Arrays.deepToString(b));
运行结果:
[[I@da2dbb, [I@176fe71, [I@fb509a]
[[1, 2, 3], [8, 4, 11], [3, 6, 13]]
五,Java中Arrays类的常用方法
Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。
Arrays.fill(); //填充数组
int[] a = new int[5];//新建一个大小为5的数组
Arrays.fill(a,4);//给所有值赋值4
System.out.println(Arrays.toString(a));
int[] b = new int[5];//新建一个大小为5的数组
Arrays.fill(b, 2,4,1);//给第2位(0开始)到第4位(不包括)赋值6
System.out.println(Arrays.toString(b));
运行结果:
[4, 4, 4, 4, 4]
[0, 0, 1, 1, 0]
Arrays.sort(); //数组排序
1,数字排序
int[] a = new int[] { 4, 1, 3, -2, 10 };
Arrays.sort(a);
System.out.println(Arrays.toString(a));
运行结果:
[-2, 1, 3, 4, 10]
2,字符串排序,先大写后小写
String[] a = new String[] { "a", "b", "C" };
Arrays.sort(a);
System.out.println(Arrays.toString(a));
运行结果:
[C, a, b]
3,严格按字母表顺序排序,也就是忽略大小写排序 CASE_INSENSITIVE_ORDER
String[] a = new String[] { "a", "b", "C" };
Arrays.sort(a, String.CASE_INSENSITIVE_ORDER);
System.out.println(Arrays.toString(a));
运行结果:
[a, b, C]
4,反向排序, Collections.reverseOrder()
String[] a = new String[] { "a", "b", "C" };
Arrays.sort(a, Collections.reverseOrder());
System.out.println(Arrays.toString(a));
运行结果:
[a, b, C]
5,忽略大小写反向排序 (先忽略大小写,再反向排序)
String[] a = new String[] { "a", "B", "c","D" };
Arrays.sort(a, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(Arrays.asList(a));
System.out.println(Arrays.toString(a));
运行结果:
[D, c, B, a]
6,选择数组指定位置进行排序
int[] a = {3,2,1,8,6,5,4,7};
Arrays.sort(a,0,3);//给第0位(0开始)到第3位(不包括)排序
System.out.print(Arrays.toString(a));
运行结果:
[1, 2, 3, 8, 6, 5, 4, 7]
Arrays.toString(); //将数组中的内容全部打印出来
int[] a = {3,2,1,5,4};
System.out.println(a);//直接将数组打印输出
String str = Arrays.toString(a); // Arrays类的toString()方法能将数组中的内容全部打印出来
System.out.println(str);
运行结果:
[I@da2dbb
[3, 2, 1, 5, 4]
Arrays.equals(); //比较数组元素是否相等
int[] arr1 = {1,2,3};
int[] arr2 = {1,2,3};
System.out.println(Arrays.equals(arr1,arr2));
System.out.println(arr1.equals(arr2));
运行结果:
true
false
因为equals比较的是两个对象的地址,不是里面的数,而Arrays.equals重写了equals,所以,这里能比较元素是否相等。
Arrays.copyOf();//复制数组
int[] a= {3, 7, 2, 1};
int[] b=Arrays.copyOf(arr6, 4); //指定新数组的长度
int[] c=Arrays.copyOfRange(a, 1, 3); //只复制从索引[1]到索引[3]之间的元素(不包括索引[3]的元素)
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(c));
运行结果:
[3, 7, 2, 1]
[7, 2]
数组中是否包含某一个值
String[] array={"aaa","bbb","ccc","ddd","eee"};
String a="aaa";
String b="fff";
if (Arrays.asList(array).contains(a)) {
System.out.println("1");
}else {
System.out.println("2");
}
if (Arrays.asList(array).contains(b)) {
System.out.println("1");
}else {
System.out.println("2");
}
运行结果:
1
2
其它方法,详情见JAVA JDK_API
六,数组去重
1,利用set的特性去重
int[] arr11 = {1,2,3,4,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3};
Set<Integer> set2=new HashSet<Integer>();
for (int i = 0; i < arr11.length; i++) {
set2.add(arr11[i]);
}
System.out.println(set2);
int[] arr12 = new int[set2.size()];
int j=0;
for (Integer i:set2) {
arr12[j++]=i;
}
System.out.println(Arrays.toString(arr12));
运行结果:
[0, 32, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 32, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2,用List集合实现
int[] str = {5, 6, 6, 6, 8, 8, 7,4};
List<Integer> list = new ArrayList<Integer>();
for (int i=0; i<str.length; i++) {
if(!list.contains(str[i])) {
list.add(str[i]);
}
}
System.out.println("去除重复后的list集合"+list);
运行结果:
[5, 6, 8, 7, 4]
3,用hashSet或者TreeSet实现
Integer[] nums = { 5, 5, 6, 6, 6, 8, 8, 7, 11, 12, 12 };
HashSet hset = new HashSet(Arrays.asList(nums));
//TreeSet<Integer> hset = new TreeSet<Integer>(Arrays.asList(nums));
Iterator i = hset.iterator();
while(i.hasNext()){
System.out.print(i.next());
}
运行结果:
56781112
4,用List和set实现
int[] nums = { 5, 6, 6, 6, 8, 8, 7 };
List<Integer> numList = new ArrayList<Integer>();
for (int i : nums)
numList.add(i);
Set<Integer> numSet = new HashSet<Integer>();
numSet.addAll(numList);
System.out.println(numSet);
运行结果:
[5, 6, 7, 8]
七,数组删除,增加元素
删除数组中其中一个元素
String [] str = {"Java", "C++", "Php", "C#", "Python"};//删除php
List<String> list = new ArrayList<String>();
for (int i=0; i<str.length; i++) {
list.add(str[i]);
}
list.remove(2); //list.remove("Php")
String[] newStr = list.toArray(new String[1]); //返回一个包含所有对象的指定类型的数组
System.out.println(Arrays.toString(newStr));
运行结果:
[Java, C++, C#, Python]
在数组中增加一个元素
String [] str = {"Java", "C++", "Php", "C#", "Python"};//增加ruby
List<String> list = new ArrayList<String>();
for (int i=0; i<str.length; i++) {
list.add(str[i]);
}
list.add(2, "ruby");
String[] newStr = list.toArray(new String[1]); //返回一个包含所有对象的指定类型的数组
System.out.println(Arrays.toString(newStr));
运行结果:
[Java, C++, ruby, Php, C#, Python]
八,数组与List相互转换
数组转 List ,使用 JDK 中 java.util.Arrays 工具类的 asList 方法
String[] strs = new String[] {"aaa", "bbb", "ccc"};
List<String> list = Arrays.asList(strs);
for (String s : list) {
System.out.println(s);
}
List 转数组,使用 List 的toArray方法。无参toArray方法返回Object数组,传入初始化长度的数组对象,返回该对象数组
List<String> list2 = Arrays.asList("aaa", "bbb", "ccc");
String[] array = list2.toArray(new String[list2.size()]);
for (String s : array) {
System.out.println(s);
}
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341