阅读更多

28顶
0踩

编程语言

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

2013-09-16 15:23 by 副主编 wangguo 评论(14) 有399560人浏览
下面是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语言中一维数组的定义有两种方式 数...

  • asp代码ASP家教信息管理系统(源代码+论文)

    asp代码ASP家教信息管理系统(源代码+论文)本资源系百度网盘分享地址

  • 基于ssm高校毕业选题管理系统.zip

    基于ssm高校毕业选题管理系统.zip

  • 基于旷视研究院领先的深度学习算法,提供满足多业务场景的预训练模型.zip

    人工智能毕业设计&课程设计

  • tensorflow_model_optimization-0.1.3.dev0-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • tensorflow_model_analysis-0.15.0-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • 粒子群算法.docx 粒子群算法(Particle Swarm Optimization,PSO)是一种优化算法,受到鸟群或鱼

    粒子群算法 粒子群算法(Particle Swarm Optimization,PSO)是一种优化算法,受到鸟群或鱼群等群体行为的启发。该算法通过模拟群体中个体之间的合作和竞争来搜索最优解。粒子群算法通常用于解决连续优化问题。 ### 工作原理: 1. **初始化**:随机生成一群粒子(也称为个体),每个粒子代表搜索空间中的一个解,并随机初始化其位置和速度。 2. **评估**:根据每个粒子的位置,计算其对应的适应度值(目标函数值)。 3. **更新**:根据个体最优和全局最优的情况,更新每个粒子的速度和位置。粒子会根据自己历史最好的位置以及整个群体历史最好的位置进行调整,以期望更好的搜索方向。 4. **迭代**:重复评估和更新步骤,直到满足停止条件(如达到最大迭代次数、目标函数值足够接近最优解等)。 ### 主要参数: - 粒子数量(Population Size):群体中粒子的数量,通常越大越容易找到全局最优解,但计算成本也会增加。 - 惯性权重(Inertia Weight):控制粒子运动的惯性,平衡局部搜索和全局搜索能力。通常随着迭代次数增加而逐渐减小。

  • 20210327 AI-for-Drug-Discovery-2020.pdf

    20210327 AI-for-Drug-Discovery-2020

  • tensorflow_model_optimization-0.1.2-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • Linux创建虚拟机的步骤

    Linux创建虚拟机的步骤

Global site tag (gtag.js) - Google Analytics