Java学习篇之数组方法

Java中数组常用方法的总结(学习过程中看到的一篇关于Java数组的常用方法,希望能给大家提供帮助)

一、Java标准类库提供static方法System.arraycopy(),用它复制数组比用for循环复制要快得多,     System.arraycopy()针对所有的类型做了重载,需要5个参数。

  第一个参数:源数组。

  第二个参数:偏移量,即从哪个位置开始复制的索引。

  第三个参数:目标数组。

  第四个参数:偏移量。

  第五个参数:要从源数组中复制到目标数组元素的个数,一般情况下为目标数组的长度。

例:     从A数组中复制元素到B数组?

public class Practice {

  public static void main(String[] args){

    String[] A = {"H","e","l","l","o"};

    String[] B = new String[3];

    System.arraycopy(A, 0, B, 1, B.length - 1);

      for(int i = 0; i < B.length; i ++){

        System.out.print(B[i] + " ");

       }

  }     }

运行结果为:null H e;

二、Array.Fill(数组名,值)此方法用于填充数组。

例:        现向已知数组A中填充值?

public class Practice {

  public static void main(String[] args){

    String[] A = new String[5];

    Arrays.fill(A, "Hello");

    for(int i = 0; i < A.length; i ++){

    System.out.print(A[i] + " ");

    }

}        }

运行结果为:                   Hello Hello Hello Hello Hello

三、Array.equals(数组名A,数组名B),比较两个数组A、B是否相等,此方法针对所有基本类型与object都作了重载,

例如比较两个数是否相等用Integer.equals()方法……,通过object.equals()方法比较数组是否相等,是基于内容的。

例:        三个已知数组的比较?

public class Practice {

public static void main(String[] args){

String[] A = {"1","2","3"};

String[] B = {"一","二","三"};

String[] C = {"1","2","3"};

System.out.println(Arrays.equals(A, B));

System.out.println(Arrays.equals(A, C));

}        }

运行结果为:false                             true

四、Array.asList()此方法用于输出数组中的所有数.

例:        输出已知数组A中的所有数?

public class Practice {

public static void main(String[] args){

String[] A = {"H","e","l","l","o"};

System.out.println(Arrays.asList(A));

}        }

运行结果为:                   [H, e, l, l, o];

五、数组中的排序

使用内置的排序方法,就可以对任意的基本类型数组排序,也可以对任意的对象数组进行排序,只要该对象实现了Comparable接口或具有相关联的Comparator接口

例:       已经数组String[] A = {"A","B","c","D","e","f","G","H"};现对数组A进行排序,要求忽略大小写排序?

分析:String默认的排序方法,第一步是将大写字母开头的词均放在小写字母头的词的前面,然后才进行排序。

如:String[] A = {"A","B","c","D","e","f","G","H"};

  Arrays.sort(A);

    System.out.println(Arrays.asList(A));

运行结果为:[A, B, D, G, H, c, e, f];

如果想忽略大小写,可以通过自定义排序方式来实现:

如:

public class Practice1 implements Comparator{

    public static void main(String[] args){

      String[] A = {"A","B","c","D","e","f","G","H"};

      Arrays.sort(A,new Practice1());

      System.out.println(Arrays.asList(A));

      }

public int compare(Object o1, Object o2) {

      String s1 = (String)o1;

      String s2 = (String)o2;

      return s1.toLowerCase().compareTo(s2.toLowerCase());

}                 }

运行结果为:[A, B, c, D, e, f, G, H];

六、使用Arrays.binarySearch()执行快速查找。

例:快速查找数组A中的元素?

  public class Practice{

    public static void main(String[] args){

        String[] a = {"a","d","e","w","f"};

        Arrays.sort(a);

        System.out.println(Arrays.asList(a));

        int index1 = Arrays.binarySearch(a, "f");

        System.out.println("要查找的值存在的时候:" + index1);

        int index2 = Arrays.binarySearch(a, "n");

        index2 = -index2 - 1;

        System.out.print("当不存在的时候输出该值最可能存在的位置:" + index2);

}

}

注意:不要对未排序的数组使用binarySearch();

七、Arrays.copyOf()用法,这个方法是将原数组快速复制成一个新数组。

  如果新数组的长度小于旧数组的长度,将截取一部分旧数组中的元素,复制给新数组,     反之,如果大于旧数组的长度,则将以0,null,或false给予补充。

例:快速复制数组?

  public class Practice{

    public static void main(String[] args){

      String[] a = {"a","d","e","w","f"};

      String[] b = new String[4];

      String[] c = new String[5];

      String[] d = new String[6];

      b = Arrays.copyOf(a, b.length);

      c = Arrays.copyOf(a, c.length);

      d = Arrays.copyOf(a, d.length);

      System.out.println("b数组的元素:" + Arrays.asList(b));

      System.out.println("c数组的元素:" + Arrays.asList(c));

      System.out.println("d数组的元素:" + Arrays.asList(d));

}      }

运行结果为:                 b数组的元素:[a, d, e, w]                c数组的元素:[a, d, e, w, f]                 d数组的元素:[a, d, e, w, f, null]

八、Arrays.copyOfRange()用法,这个方法与前面介绍的Arrays.copyOf()的用法相似,下面来通过具体实例讲解。

例:如何将原数组指定复制一个新数组?

  public class Practice{

    public static void main(String[] args){

      String[] a = {"a","d","e","w","f"};

      String[] b = new String[4];

      b = Arrays.copyOfRange(a, 2, 4);

      System.out.println("b数组的元素:" + Arrays.asList(b));

}      }

运行结果为:                b数组的元素:[e, w];

相信读者已知道其中用法了吧,type[] N = Arrays.copyofRange("原数组",i,j)就是复制原数组赋值给新的数组N,指定从索引i到j;

九、Arrays.deepToString()用法,这个方法的用法同Arrays.asList()的用法相似,此方法是为了将多维数组转换为字符串而设计的;     下面通过例子来看一下它们的相同点。

例:输出已知数组a中的元素。

  public class Practice{

    public static void main(String[] args){

      String[] a = {"a","d","e","w","f"};

      System.out.println("用Arrays.asList()方法输出:" + Arrays.asList(a));

      System.out.println("用Arrays.deepToString()方法输出:" + Arrays.deepToString(a));;

}    }

运行结果为:

用Arrays.asList()方法输出:[a, d, e, w, f]。

用Arrays.deepToString()方法输出:[a, d, e, w, f]。

十、Arrays.deepEquals()的用法。

说明:此方法与 Arrays.equals(Object[],Object[]) 方法不同,此方法适用于任意深度的嵌套数组。

如果两个数组引用均为 null,或者它们引用了包含相同元素数量的数组,并且两个数组中的所有相应元素对都是深层相等的,则认为这两个数组引用是深层相等的。

例:已知三个三维数组间的比较。

  public class Practice{

    public static void main(String[] args){

      String[][][] d = new String[2][2][2];

      d[1][1][1] = "a";

      String[][][] e = new String[3][3][3];

      e[1][1][1] = "a";

      String[][][] f = new String[2][2][2];

      f[1][1][1] = "a";

      String[][][] g = new String[2][2][2];

      g[1][1][1] = "ab";

      System.out.println("--------------------------");

      System.out.println("输出equals()方法与deepEquals()方法的区别;");

      System.out.println("数组d与数组f进行比较: " + d.equals(f));

      System.out.println("数组d与数组f进行比较: " + Arrays.deepEquals(d, f));

      System.out.println("--------------------------");

//下面输出比较结果

System.out.println("=================================");

System.out.println("数组d与数组e进行比较: " + Arrays.deepEquals(d, e));

System.out.println("数组d与数组g进行比较: " + Arrays.deepEquals(d, g));

System.out.println("=================================");          } }

运行结果为:              --------------------------    输出equals()方法与deepEquals()方法的区别;

数组d与数组f进行比较: false

数组d与数组f进行比较: true

--------------------------

=================================

数组d与数组e进行比较: false

数组d与数组g进行比较: false

=================================

十一、Collections.reverseOrder()用法(反转自然的顺序);

例:用除了循环外的另一方式逆向输出已知数组a?

  public class Practice{

    public static void main(String[] args){

      String[] a = {"a","b","c"};

      Arrays.sort(a,Collections.reverseOrder());

      System.out.println(Arrays.asList(a));

}         }

运行结果为:[c, b, a];

时间: 2024-12-09 18:23:05

Java学习篇之数组方法的相关文章

JAVA学习篇--JSTL基础

JSTL是什么 JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库. 为什么要用JSTL 我们JSP用于开发信息展现页非常方便;也可以嵌入java代码(scriptlet.表达式和声明)代码用来实现相关逻辑控制.看下面程序.但这样做会带来如下问题: jsp维护难度增加;出错提示不明确,不容易调试; 分工不明确;(即jsp开发者是美工,也是程序员); 最终增加程序的开发成本; <% if (session.getAttribute(

JAVA学习篇--ThreadLocal,Java中特殊的线程绑定机制

在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个connection连接).那么ThreadLocal是如果做到的呢?它和同步锁的不同在哪里? 是什么: 对于ThreadLocal看英文单词我们很容易理解为一个线程的本地实现,但是它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名为ThreadLoc

JAVA学习篇--Java类加载

由来: 与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序(解释性语言).当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Javaclass加载到JVM里头运行,负责加载Javaclass的这部分就ClassLoader.中文叫做类加载器. 类加载器就好比一个代理,你需要什么,我通过类加载器将你需要的内容返回给你! 类加载器有什么作用? 当程序需要的某个类,那么需要通过类加载器把类的二进制加载到内存中. 解释: 类加载器也是Java类,因为其他是java类的

JAVA学习篇--javaweb之Filter详解

在DRP项目中,多次提到了Filter,它解决了字符集的统一设置以及统一控制简单WebCache,从中我们可以体会到,它给我们带来的好处不仅仅是减少代码量这么简单,它的出现避免了我们每个页面重复的编写相同的代码,减少了我们的工作量,而且给维护带来了极大的便利,那么它是如何实现统一管理的呢?既然它能统一管理某些重复的操作,那么它和AOP有什么关系呢? Filter简介 ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过

JAVA学习篇--静态代理VS动态代理

本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢? 原因: 1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者的区别是什么呢? 2,通过学习动态代理了解到动态代理是一种符合AOP设计思想的技术,那么什么又是AOP? 下面是我对它们的理解! 代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对

JAVA学习篇--JSP实现原理

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变.如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难. 解决方案: 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java 

JAVA学习篇--JAVA的两种编程模式对比

在Drp项目中,讲解了两种编程模式Model 1和Model2,下面是对这两种模式的简单理解,以及由于Model2是基于MVC架构的模式,就将我们易混淆的MVC与我们之前学的三层架构进行对比学习一下. Model1 所谓Model1就是JSP大行其道的时代,在Model1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应.用少量的JavaBean来处理数据库连接.数据库访问等操作. 代码示例:修改用户信息 主页面的js跳转: function

java学习篇(一)从网络下载图片

(1)在java中,通过网络,下载图片. import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * 通过URL,从网络下载图片 * @author TF */ public class Imag

Java学习-025-类名或方法名应用之二 -- 统计分析基础

前文讲述了类名或方法的应用之一调试源码,具体请参阅:Java学习-025-类名或方法名应用之一 -- 调试源码 此文主要讲述类名或方法应用之二统计分析,通过在各个方法中插桩(调用桩方法),获取方法的调用关系.通过调用关系,我们可以统计出被调用次数比较多的方法,同时也可以构建全系统调用关系链:通过操作重要业务流程,可以统计组成重要业务流程的主要方法,加强相应的单元测试.功能.安全.性能等方面的测试.对于软件产品质量控制存在非凡的意义. 下面构建的演示示例调用关系如下所示: GetClassMeth