【Java】Arrays中之于int数组的方法,Integer数组与int数组

在java.util.*中,Arrays似乎很有用的样子,似乎用里面的方法就可以避免使用for循环要自己写对数组的查找、初始化、排序等方法了。

一、先说说Arrays中对整形数组真的有用的方法

1、首先是Arrays.toString()

一般,直接用System.out.println()打印数组,比如这样:

int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };
System.out.println(array);

出来的结果是一堆乱码:

[Ljava.lang.Integer;@4f19c297

整形数组不像ArrayList<Integer>那样可以直接打印,

但是如果写成这样:

int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };
System.out.println(Arrays.toString(array));

就真的可以打印成:

[8, 7, 100, 88, 6, 4, 5, 33, 10]

因此,使用Arrays.toString()能够有效地避免写一个for循环

2、Arrays.fill();使得一个值填充一个数组。例如:

int array_init[]=new int[20];
Arrays.fill(array_init, 0);
System.out.println(Arrays.toString(array_init));

打印出来则是20个0,也就是此时array_init的值,这个方法在数组初始化的时候略有用,可以避免一个for循环……

3、Arrays.copyOf();则提供了把一个数组的元素复制到另一个数组当中,里面还可以带一些参数,指定复制范围,可以避免使用for循环来完成这个操作,这个没有什么意义,实际操作中很少用。

二、然而Arrays中也对很多整形数组没叼用的方法

1、虽说里面的Arrays.binarySearch();提供了查找功能,但实际上这个方法并不返回当前的你要查找的元素的位置,它是返回你要查找的元素在这个数组升序排列之后的位置,找不到则返回-1,但是不知道为何下面一段程序:

int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };
System.out.println(Arrays.toString(array));
System.out.println(Arrays.binarySearch(array,7));
Arrays.sort(array);
System.out.println(Arrays.toString(array));
System.out.println(Arrays.binarySearch(array,7));

输出一个-8一个3,明明7在排序前排序后都在这个数组里面啊!

2、Arrays.sort();提供了数组升序排序功能

但是没有降序排序功能,有人试图用Arrays.sort(array, Collections.reverseOrder());去解决这个问题,但是这段代码对于int array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };是编译不通过的,对于Integer array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };才OK,比如:

Integer array[] = { 8, 7, 100, 88, 6, 4, 5, 33, 10 };
System.out.println(Arrays.toString(array));
Arrays.sort(array, Collections.reverseOrder());
System.out.println(Arrays.toString(array));

则输出:

[8, 7, 100, 88, 6, 4, 5, 33, 10]

[100, 88, 33, 10, 8, 7, 6, 5, 4]

明显达到我们想要的效果,但是如果把数组从Integer换成int则是不行的,虽然JDK1.5之后什么Integer数组与int数组是系统自动识别的,然后什么方法都没有提供,网上还说这样转换没有实际意义,但是实际上却在这样的语句中编译不通过,对于int的降序排序你还是要老老实实地写for循环,或者用我上次在《【Java】Java中的Collections类——Java中升级版的数据结构》(点击打开链接

3、至于Arraylist与int数组的互相转换就别想了,还是要老老实实用for循环,只有Integer数组才有特定的方法,Arraylist中的toArray()与Arrays中的asList()根本不知道意义何在?貌似在强推Integer数组取代int数组?毕竟Integer数组中的方法更多。但是教科书上还是一堆int数组的教学。

时间: 2024-09-29 17:56:11

【Java】Arrays中之于int数组的方法,Integer数组与int数组的相关文章

【JAVA】Java 异常中e的getMessage()和toString()方法的异同

参考链接 CSDN: Java 异常中e的getMessage()和toString()方法的异同 示例代码1: public class TestInfo { ????private static String str =null; ????public static void main(String[] args) { ????????System.out.println("test exception"); ????????try { ????????????if(str.equ

java开发中遇到的问题及解决方法(持续更新)

摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不想动用Eclipse大家伙,只能自己动手编写脚本进行Java代码的编译和运行,期间遇到的一些问题,记录下来供自己和大家参考.1)软件包不存在/软件包 javax.jms 不存在    这是由于javac编译时找不到javax.jms所在的软件包,因此将

js中改变原数组的方法以及解决改变原数组的方法

改变原数组的方法 pop():删除数组最后一个元素,并返回该元素 push():在数组尾部添加元素,并返回更新后的数组长度 shift():删除数组的第一个元素,并返回该元素 unshift():在数组第一位添加元素,并返回更新后的数组长度 sort():对数组排序(按字符ASCII进行排序),也可添加回调函数按照想要的规则排序 reverse():数组反转 splice(index, howmany, 新数据):返回被删除元素所组成的数组. 解决改变原数组的方法 背景:需要一个和原数组相等的数

java项目中redis的配置好工具方法

配置文件对redis的配置: #REDIS_CONFIG redis.sentinels = x.x.x.x:p,x.x.x.x:p,x.x.x.x:p redis.sentinel.master = redis-master redis.password = password redispool.maxtotal = 6000 redispool.maxidle = 300 redispool.maxwaitmillis = 10000 redispool.timeout = 100 #red

Java多线程中join、yield、sleep方法详解

在Java多线程编程中,Thread类是其中一个核心和关键的角色.因此,对该类中一些基础常用方法的理解和熟练使用是开发多线程代码的基础.本篇主要总结一下Thread中常用的一些静态方法的含义及代码中的使用. sleep方法 源码如下: /** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified number of milliseconds, subje

一个java文件中可包含多个main方法

java中的main方法是java应用程序的入口,java程序在运行时,首先调用执行main方法.但并不是说java中只能有一个main方法,不同类中都可以包含main方法.当JVM进行编译时,会提示选择其中一个main方法作为编译的入口.

java类中为什么设置set和get方法操作属性

java程序规范中会建议大家尽量将类中的属性私有化,即定义为private变量,通过设置set和get函数来对属性进行操作.一些人存在这样的疑问,为什么不直接将属性设置为public,以后调用属性时直接通过对象进行访问不是更方便? 当然java中这样做有它的原因: 1  将数据与行为分离,也就是java的面向对象的概念.   对象就是属性+行为,封装就是把对象的私有属性封装起来,只有通过自己公开的行为去改变(获得)对象内部的私有属性信息,而那些public的方法正是面向其他对象的接口,只有通过接

java学习过程中遇到的坑及解决方法

1. Table 'my_data_base.gjp_zhangwu' doesn't exist Query: select * from gjp_zhangwu Parameters: 数据库中的表不存在 2.java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 需要导入commons-logging jar包 原文地址:https://www.cnblogs.com/we-smile/p/968047

Java Thread中,run方法和start方法的区别

 两种方法的区别: 1.start方法 用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法.但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码.所以run()方法并没有实现多线程. 2.run方法 run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是

在java 多态 中 父类作为参数列表的方法

Pet pet=new Dog();  //Pet是父类,Dog是子类. 这个方法是父类做类型,子类实例化. 相关例子: 员工回家的例子: 1,先做一个抽象父类,包含走的想法. package cn.day1; public abstract class Traffic { public abstract void run(); } 2,在创建一个类,包含回家的想法. package cn.day1; public class Employee { public void gohome(Traf