阅读更多

28顶
0踩

编程语言

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

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

  • 2010考研管理类联考综合能力答案解析.pdf

    考研管理类联考综合能力答案解析,考研真题,考研历年真题,考研管理类联考历年真题,真题解析。

  • NumPy Matplotlib Matplotlib 是 Python 的绘图库 .zip

    matplotlib绘图 通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图、直方图、功率谱、条形图、错误图、散点图等。 Matplotlib基础知识 1.Matplotlib中的基本图表包括的元素 x轴和y轴 水平和垂直的轴线 x轴和y轴刻度 刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度标签 表示特定坐标轴的值 绘图区域 实际绘图的区域 2.hold属性 hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。 但是不推荐去动hold这个属性,这种做法(会有警告)。因此使用默认设置即可。 3.网格线 grid方法 使用grid方法为图添加网格线 设置grid参数(参数与plot函数相同) .lw代表linewidth,线的粗细 .alpha表示线的明暗程度 4.axis方法 如果axis方法没有任何参数,则返回当前坐标轴的上下限 5.xlim方法和ylim方法 除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围

  • 毕业设计:基于微信小程序大学校园二手教材与书籍拍卖系统(源码 + 数据库 + 说明文档)

    毕业设计:基于微信小程序大学校园二手教材与书籍拍卖系统(源码 + 数据库 + 说明文档) 毕业设计:基于微信小程序大学校园二手教材与书籍拍卖系统(源码 + 数据库 + 说明文档) 第二章 需求分析 4 2.1可行性分析 4 2.1.1技术的可行性 4 2.1.2经济的可行性 4 2.1.3操作可行性 4 2.2需求调研 4 第三章 数据库设计 6 3.1数据库的分析与设计 6 3.1.1数据库的概念结构设计 6 3.1.2数据表的逻辑结构设计 7 第四章 系统功能实现 8 4.1 系统后台界面 8 4.2书籍类别管理 8 4.3 书籍信息界面 9 4.4竞拍管理界面 9 4.5 微信小程序首页 9 4.6书籍信息添加 10 4.7书籍竞拍界面 11 4.8用户后台界面 11 第五章 系统测试 12 5.1 系统测试的意义 12 5.2 系统测试的内容 12 5.3系统测试结果 12 总结 13

  • 利用openCV控制单片机小车运动轨迹.zip

    利用openCV控制单片机小车运动轨迹.zip

  • 基于Python的PCA人脸识别算法的原理及实现代码+文档详解.zip

    基于Python的PCA人脸识别算法的原理及实现代码+文档详解.zip个人经导师指导并认可通过的98分课程设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学习者。

  • JAVA学生成绩管理系统.rar

    JAVA学生成绩管理系统.rarJAVA学生成绩管理系统.rarJAVA学生成绩管理系统.rar

  • 群体课堂专注度分析考试作弊系统动态点名功能的pyqt5多人姿态估计情绪识别人脸识别静默活体检测源码.zip

    详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;

  • 基于51单片机的智能车控制板.zip

    基于51单片机的智能车控制板.zip

  • 2016管理类联考199综合能力全国硕士研究生招生考试真题.pdf

    考研管理类联考综合能力答案解析,考研真题,考研历年真题,考研管理类联考历年真题,真题解析。

Global site tag (gtag.js) - Google Analytics