阅读更多

28顶
0踩

编程语言

原创新闻 关于 Java 数组的 12 个最佳方法

2013-09-16 15:23 by 副主编 wangguo 评论(14) 有399823人浏览
下面是stackoverflow中关于数组方法的相关问题中,获得最多票数的12个数组操作方法。

1.  声明一个数组

String[] aArray = new String[5];
String[] bArray = {"a","b","c", "d", "e"};
String[] cArray = new String[]{"a","b","c","d","e"};


2.  输出一个数组

int[] intArray = { 1, 2, 3, 4, 5 };
String intArrayString = Arrays.toString(intArray);
 
// print directly will print reference value
System.out.println(intArray);
// [I@7150bd4d
 
System.out.println(intArrayString);
// [1, 2, 3, 4, 5]


3.  从一个数组创建数组列表


String[] stringArray = { "a", "b", "c", "d", "e" };
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
System.out.println(arrayList);
// [a, b, c, d, e]


4.  检查一个数组是否包含某个值


String[] stringArray = { "a", "b", "c", "d", "e" };
boolean b = Arrays.asList(stringArray).contains("a");
System.out.println(b);
// true


5.  连接两个数组

int[] intArray = { 1, 2, 3, 4, 5 };
int[] intArray2 = { 6, 7, 8, 9, 10 };
// Apache Commons Lang library
int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);


6.  声明一个内联数组(Array inline)


method(new String[]{"a", "b", "c", "d", "e"});


7.  把提供的数组元素放入一个字符串


// containing the provided list of elements
// Apache common lang
String j = StringUtils.join(new String[] { "a", "b", "c" }, ", ");
System.out.println(j);
// a, b, c


8.  将一个数组列表转换为数组

String[] stringArray = { "a", "b", "c", "d", "e" };
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
String[] stringArr = new String[arrayList.size()];
arrayList.toArray(stringArr);
for (String s : stringArr)
	System.out.println(s);


9.  将一个数组转换为集(set)


Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
System.out.println(set);
//[d, e, b, c, a]


10.  逆向一个数组

int[] intArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(intArray);
System.out.println(Arrays.toString(intArray));
//[5, 4, 3, 2, 1]


11.  移除数组中的元素

int[] intArray = { 1, 2, 3, 4, 5 };
int[] removed = ArrayUtils.removeElement(intArray, 3);//create a new array
System.out.println(Arrays.toString(removed));


12.  将整数转换为字节数组

byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();
 
for (byte t : bytes) {
   System.out.format("0x%x ", t);
}


Via programcreek
28
0
评论 共 14 条 请登录后发表评论
14 楼 yixiandave 2013-09-22 14:00
yelangking 写道
总的来讲还是比较实用,但是有一点不明白的是,第六点,method(new String[]{"a", "b", "c", "d", "e"}); 内联数组干嘛用呢,还请赐教,另外对于11点,移除数组中的元素,可以转换成list集合后,直接调用remove方法直接删除,jdk中支持按照索引下标删除和元素本身删除!这是我的拙见。


内联数组在调用方法需要一个数组参数的时候可以直接在方法内创建,而不需要在外部创建一个变量再来传入。如果只有一个数组参数,使用 String.. 形式的可变长度参数更方便,但是对于需要传入多个数组参数的情况就可以用内联的方式传值

第二问,我只能说,转换为List需要消耗更多的资源。。也许现在你不关注这个,但对效率要求非常严格的地方这种方式是有意义的
我们可以看看ArrayUtils内部的实现代码:
    public static Object[] remove(Object[] array, int index) {
        return (Object[]) remove((Object) array, index);
    }

    private static Object remove(Object array, int index) {
        int length = getLength(array);
        if (index < 0 || index >= length) {
            throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
        }

        Object result = Array.newInstance(array.getClass().getComponentType(), length - 1);
//关键!调用了System.arraycopy方法
        System.arraycopy(array, 0, result, 0, index);
        if (index < length - 1) {
            System.arraycopy(array, index + 1, result, index, length - index - 1);
        }

        return result;
    }

我们再来看看System.arraycopy是什么东西:
public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

注意,这里是native方法,直接调用内核进行运算,效率不说比转为List快了,甚至比自己遍历一遍数组赋值都快
13 楼 yelangking 2013-09-22 10:39
总的来讲还是比较实用,但是有一点不明白的是,第六点,method(new String[]{"a", "b", "c", "d", "e"}); 内联数组干嘛用呢,还请赐教,另外对于11点,移除数组中的元素,可以转换成list集合后,直接调用remove方法直接删除,jdk中支持按照索引下标删除和元素本身删除!这是我的拙见。
12 楼 Tu小二 2013-09-19 20:42
ArrayUtils是他自己写的方法
11 楼 影非弦 2013-09-18 14:13
知道了,叫的这么正式,还以为是什么呢
10 楼 影非弦 2013-09-18 14:12
内联数组是神马?以前没听说过啊
9 楼 yixiandave 2013-09-17 13:44
好吧。。是我没看清楚=w=
8 楼 yixiandave 2013-09-17 13:44
关于第8个
List有个toArray()接口,分为无参数和数组参数两种
        //初始准备
        String[] strArray = {"aa","bb","cc"};
        List<String> stringList = new ArrayList<String>(Arrays.asList(strArray));
        String[] newArray1 = new String[stringList.size()];
        //输入一个String数组,直接以String数组输出
        newArray1 = stringList.toArray(newArray1);
        System.out.println(ArrayUtils.toString(newArray1));
        //无参数,直接输出Object数组
        Object[] newArray2 = stringList.toArray();
        System.out.println(ArrayUtils.toString(newArray2));
7 楼 yixiandave 2013-09-17 13:36
pangpang514 写道
第11,ArrayUtils哪个包下面的?

commons-lang
6 楼 shidan66 2013-09-17 10:22
huihai 写道
第8个没有看明白,感觉刚开始是一个数组,后面还一个数组啊,有区别吗?

重点在数组和list的转换
5 楼 pangpang514 2013-09-17 09:38
第11,ArrayUtils哪个包下面的?
4 楼 renci 2013-09-17 09:33
第12个是啥意思
3 楼 huihai 2013-09-17 08:12
第8个没有看明白,感觉刚开始是一个数组,后面还一个数组啊,有区别吗?
2 楼 xiajie8931 2013-09-16 23:56
徐风子 写道

表示觉得挺好的。
1 楼 徐风子 2013-09-16 18:18

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java中的数组_关于 Java 数组的 12 个最佳方法

    下面是stackoverflow中关于数组方法的相关问题中,获得最多票数的12个数组操作方法。1. 声明一个数组String[] aArray = new String[5];String[] bArray = {"a","b","c", "d", "e"};String[] cArray = new String[]{...

  • Java数组转List的三种方式及对比

    本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。

  • JAVA中将数组清空_清空Java中数组的最佳方法 - java

    做这个的最好方式是什么?将null分配给该数组可以吗?data=null;参考方案您是否希望数组仍然存在但其中什么也没有?重新初始化数组:data = new MyClass[1];您是否希望数组不再存在,以便可以在JVM感...

  • java 调用方法 数组_JAVA方法与数组

    2、设计方法的原则:一个方法只能完成1个功能,最好保持方法的原子性。3、语法:修饰符 返回值类型 方法名(参数类型 参数名){ //方法体 }二、JAVA的方法调用:1、调用方法:对象名.方法名------...

  • java数组遍历最快方式_java数组遍历的方法

    对于数组来说,基本上可以看做是一些数字。...下面我们就这三种不同的数组遍历方法,带来详细的介绍。1.for循环i代表arr的下标,arr[i]获取i下标处的数组值。输出格式可以自由调整。class ArrayBianLi{...

  • JAVA 数组取值去重 两种方法

    JAVA 数组取值去重 两种方法

  • 最佳方法清空Java数组 - Java

    在Java编程中,有时候我们需要清空一个数组,也就是将数组中的所有元素设置为初始值或者空值。另一种方法是创建一个新的数组,并将其引用赋给原始数组变量。这种方法简单而直观,适用于基本类型的数组和引用类型的...

  • java不让数组变量被方法修改_关于java:在方法中更改数组会更改数组外部

    本问题已经有最佳答案,请猛点这里访问。我的变量范围有问题。public static void main(String[] args){int[] test={1,2,3};test(test);System.out.println(test[0]+""+test[1]+""+test[2]);}static void test(int[]...

  • 6.0_[Java 数组]-初识 Java 数组

    Java 内存中数组的储存方式 声明定义为数组分配空间 静态/动态 初始化数组 引用数组元素 数组元素初始值 数组长度 foreach 循环/增强型 for 循环 关于数组的两个错误 数组逻辑访问错误以及数据越界.........

  • 关于Java数组的12个最佳方法

    关于Java数组的12个最佳方法 (copy-) 博客分类:  Java javaapache   下面是stackoverflow中关于数组方法的相关问题中,获得最多票数的12个数组操作方法。  1. 声明一个数组  String[] a...

  • Java数组

    1.数组是一组有序的,具有相同数据类型的数据的集合 2.数组类型是一种引用数据类型 3.数组是有序的,可以分出先后来,它们在内存中按先后顺序连续存放 ...Java语言中一维数组的定义有两种方式 数...

  • 《基于YOLOv8的八段锦练习指导系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

  • 大语言模型教育应用中的知识冲突挑战与应对策略

    内容概要:本文详细探讨了大语言模型(LLMs)在教育应用中遇到的知识冲突问题,包括概念定义、事实陈述和逻辑推理层面的认知不一致性。文章分析了知识冲突的技术成因,如训练数据噪声、参数化知识表示的局限、推理机制的缺陷、模型架构的不足及外部知识的偏差,并探讨了这些因素对教育应用的深远影响。文中提出了多维度的解决路径,如通过数据增强优化知识表示、利用提示强化上下文连贯、开发量规完善模型评估等。此外,文章从社会文化的宏观视角剖析了知识冲突的外部驱动因素,探讨如何在多元异质、动态演进的社会建构语境中构建开放进取、兼容融通的智能教育应用体系。 适合人群:从事教育技术研究的学者、教育工作者、人工智能研究人员和技术开发者。 使用场景及目标:①帮助教育工作者理解大语言模型在教育应用中的局限性;②为技术人员提供优化大语言模型教育应用的具体策略;③促进教育人工智能技术的可靠性、适应性和普及性提升。 其他说明:文章强调了知识冲突的有效化解不仅能够提升大语言模型在教育场景中的应用价值,还将为人工智能在更广泛领域的可持续发展奠定坚实基础。

  • 《基于YOLOv8的家具鉴定系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

  • 数据结构day1-思维导图顺序表

    数据结构day1-思维导图顺序表

  • STM32超声波红外避障小车

    STM32超声波红外避障小车项目通过STM32微控制器实现自动避障功能。硬件部分主要包括STM32开发板、超声波传感器、红外传感器、直流电机、电池模块和电机驱动模块。超声波传感器用于测量前方障碍物的距离,红外传感器帮助小车检测地面线路或障碍物。电机驱动模块通过STM32控制直流电机的转动,从而实现小车的前进、后退和转向。 在软件方面,STM32通过编写简单的避障算法,实时读取传感器数据,并根据环境信息控制小车的运动。当超声波传感器检测到障碍物时,系统会触发后退或转向操作,避免碰撞。

  • 哈尔滨工业大学DeepSeek公开课-从图灵测试到DeepSeek.pdf

    哈尔滨工业大学DeepSeek公开课-从图灵测试到DeepSeek.pdf

  • 《基于YOLOv8的冰上运动监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

  • 《基于YOLOv8的体育产业监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

  • 《基于YOLOv8的港口机械识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics