Java数组的运用详解

目录
  • 一,数组的含义:
  • 二,数组的创建
    • 1,动态初始化
    • 2,静态初始化
  • 三,数组遍历
  • 四,Arrays.deepToString()与Arrays.toString()的区别
  • 五,Java中Arrays类的常用方法
    • 1,数字排序
    • 2,字符串排序,先大写后小写
    • 3,严格按字母表顺序排序,也就是忽略大小写排序 CASE_INSENSITIVE_ORDER
    • 4,反向排序, Collections.reverseOrder()
    • 5,忽略大小写反向排序 (先忽略大小写,再反向排序)
    • 6,选择数组指定位置进行排序
  • 六,数组去重
  • 七,数组删除,增加元素
  • 八,数组与List相互转换
  • 总结

一,数组的含义:

一维数组:相同数据类型的元素的集合。

二位数组:存放数组的数组,也就是说数组里存的还是数组的数据形式。

二,数组的创建

一维数组

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);
}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • java数据结构基础:稀疏数组

    目录 稀疏数组: 实现思路: 举例: 二维数组转稀疏数组实现思路: 稀疏数组恢复二维数组实现思路: 代码实现: 输出结果: 总结 稀疏数组: 当一个二维数组中大部份的值为0,或者为同一值的时候,可以用稀疏数组来保存 实现思路: 记录二维数组有多少行多少列.多少个不同的值 把不同的值按照所在行列,记录在一个规模较小的数组中 举例: 11×11的二维数组: 对应的稀疏数组: 其中,第一行分别为,原二维数组总行数.总列数.不为0的数的个数 之后几行的每一列分别代表所在行.所在列.值 二维数组转稀疏数组

  • java简单实现数组的增删改查方法

    目录 1.一维数组​ 2.数组的扩容 3.数组的复制 1.直接将数组赋值给新数组 2.创建一个新的数组,再将原数组的数据逐个赋值 4.数组的删除 5.数组的排序 6.数组的查找 1.顺序查找:从头到尾遍历(简单除暴,效率相对较低) 2.二分法查找 总结 1.一维数组​ 概念:一组数据的容器(数组可以存放多个数据) ​ 注意: ​ 1.数组是引用数据类型 ​ 2.数组中的数据又叫做元素 ​ 3.每个元素都有编号叫做下标/索引 ​ 4.下标从0开始 ​ 5.数组初始化后,会在内存中开辟一连串连续的空

  • Java实战小技巧之数组与list互转

    目录 前言 I. 数组转 List 1. Array.asList 1.1 知识点 2. new ArrayList 2.1 避雷预警 3. Collections.addAll II. 列表转数组 III. 小结 总结 前言 这个考题比较常见,也比较简单,难道就这也有什么可以说到的门路不成? 接下来本文好好的说一说它的几种实现姿势,总有一款你喜欢的 I. 数组转 List 1. Array.asList 这个考题太简单了,直接使用Array.asList不就完事了么,比如 @Test publ

  • 带你粗略了解Java数组的使用

    目录 数组的定义 注意: 数组的创建及初始化: 1.数组的创建: 2.数组的初始化 ①动态初始化: ②静态初始化: 注意事项: 数组的使用 1.数组的长度: 2.数组的访问: 3.数组的遍历: 4.使用数组交换两个整数 5.以字符串的形式输出数组: 理解引用类型: 1.基本类型变量与引用类型变量的区别 2.认识null 3.数组作为方法的返回值 二维数组: 1.创建二维数组及初始化: 2.二维数组长度: 3.二维数组的打印: 4.不规则的二维数组: Array类: 总结 数组的定义 数组:可以看

  • java实现动态数组

    本文实例为大家分享了java实现动态数组的具体代码,供大家参考,具体内容如下 数组最大的优点︰快速查询.scores[2].数组最好应用于"索引有语意"的情况,但是如果索引比较长就还是不要用数组了,比如身份证号,太长了. Java提供给我们的数组是静态数组,大小在一开始就定下来了,所以我们要创建一个动态数组,来满足我们的需求.其实原理挺简单,初次创建的时候赋予一个初始大小,当容量不够用时进行扩容,下列代码最关键的是resize方法 public class Array<E>

  • Java数组常见应用详解【创建、遍历、排序、查找】

    本文实例讲述了Java数组常见应用.分享给大家供大家参考,具体如下: 双重for循环 外循环控制行,内循环控制列. //乘法表 for(int i = 1; i <= 9; i++) { for(int j = 1; j <= i ;j++) { System.out.print(j+"*"+i+"="+(i*j)+"\t"); } System.out.println(); } DecimalFormat #:一个数字 0:一个数字

  • Java数组的运用详解

    目录 一,数组的含义: 二,数组的创建 1,动态初始化 2,静态初始化 三,数组遍历 四,Arrays.deepToString()与Arrays.toString()的区别 五,Java中Arrays类的常用方法 1,数字排序 2,字符串排序,先大写后小写 3,严格按字母表顺序排序,也就是忽略大小写排序 CASE_INSENSITIVE_ORDER 4,反向排序, Collections.reverseOrder() 5,忽略大小写反向排序 (先忽略大小写,再反向排序) 6,选择数组指定位置进

  • java list,set,map,数组间的相互转换详解

    java list,set,map,数组间的相互转换详解 1.list转set Set set = new HashSet( new ArrayList()); 2.set转list List list = new ArrayList( new HashSet());  3.数组转为list List stooges = Arrays.asList( "Larry" , "Moe" , "Curly" ); 此时stooges中有有三个元素.注意

  • Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List<String>之后,往其中添加十条随机字符串 2.每条字符串的长度为10以内的随机整数 3.每条字符串的每个字符都为随机生成的字符,字符可以重叠 4.每条随机字符串不可重复 将涉及到的知识有: String.StringBuffer.ListArray.泛型.Collections.sort.foreach.Random等相关知识,算是

  • 浅谈java中集合的由来,以及集合和数组的区别详解

    对象多了用集合存,数据多了用数组存. 数组是固定长度的,集合是可变长度的. 集合是:只要是对象就可以存,不管是不是同一种对象 而数组只能存储一种类型的对象 下面是集合的框架: 以上就是小编为大家带来的浅谈java中集合的由来,以及集合和数组的区别详解的全部内容了,希望对大家有所帮助,多多支持我们~

  • java 方法与数组基础使用详解

    目录 一.方法的使用 1.方法的定义 2.方法重载 二.数组的定义和使用 1.数组的基本概念 (1)数组的创建 (2)数组的初始化 (3)数组的遍历 2.数组是引用类型(JVM的内存分布) 3.引用变量 4.数组拷贝函数 5.二维数组的for.each遍历 一.方法的使用 1.方法的定义 java中的方法就相当于C语言中的函数 方法的语法格式 //方法的定义 修饰符  返回值类型  方法的名称([参数类型 参数]){ 方法体代码: [return 返回值]: } [注意事项] 修饰符:现阶段直接

  • java二维数组基础知识详解

    目录 1. 查找 2. 顺序查找 3. 二分查找 4. 多维数组 4.1 二维数组 175 4.2 二维数组细节 5. 二维数组的使用方式 176 6. 二维数组的动态初始化 1.先声明:类型 数组名[][]; 再定义(开辟空间) 数组名 = new 类型[大小][大小] 2.动态初始化-列数不确定 178 7. 二维数组的静态初始化 179 8. 二维数组练习 180 8.1 int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍历该二维数组,并得到和 1. 查找 1) 顺

  • java LinkedList的实例详解

    java LinkedList的实例详解 站在Java的角度看,玩队列不就是玩对象引用对象嘛! 实例代码: public class LinkedList<E> implements List<E>, Deque<E> { Node<E> first; Node<E> last; int size; public boolean add(E e) { final Node<E> l = last; final Node<E>

  • Java 反射机制实例详解

    Java 反射机制实例详解 一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,Java和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反射.通过反射,Java可以于运行时加载.探知和使用编译期间完全求和的类.生成其对象实体,调用其方法或者对属性设值.所以Java算是一个半动态的语言吧. 反射的概念: 在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对

  • Java RandomAccessFile的用法详解

    RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和 DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫

随机推荐