世道变了,面试初级Java开发会问到Arrays!!!你不会还不知道吧!

一、基本定义

Arrays类,全路径java.util.Arrays,主要功能为操作数组,Arrays类的所有方法均为静态方法,所以

调用方式全部为Arrays.方法名

二、常用方法

1. <T> List<T>  asList(T... a)

可以将数组转化为相应的list集合,但是也只能转化为list,asList方法内部构建了一个内部静态类ArrayList

这个ArrayList也继承自AbstractList,但并不是我们集合中常用的ArrayList,这两者是有区别的,需注意,

内部静态类AbstractList也实现了contains,forEach,replaceAll,sort,toArray等方法,但add,remove等方法则没有

Integer[] array = new Integer[]{1,2,3}; 
int[] array2 = new int[]{1,2,3};
List<Integer> list1 = Arrays.asList(1,2,3);
List<Integer> list2 = Arrays.asList(array);
List<int[]> list3 = Arrays.asList(array2);
  1. void fill(int[] a, int val)、void fill(int[] a, int fromIndex, int toIndex, int val)、void fill(Object[] a, Object val)、void fill(Object[] a, int fromIndex, int toIndex, Object val)

fill方法有多个重载,分别对应几种基本数据类型以及引用类型(Object),

fill(int[] a, int val)会将整个数组的值全部覆盖为val
fill(int[] a, int fromIndex, int toIndex, int val)则提供了可选的开头和结尾(不包括)

int[] array = new int[]{1,2,3};
Arrays.fill(array, 1);
Arrays.fill(array, 0, 2, 1);// {1,1,3}
String[] str = {"123"};
Arrays.fill(str, "1");

源码如下:

我们可以看到可选开头结尾的重载方法会先做数组越界的校验,防止非法输入

   /** * Assigns the specified double value to each element of the specified* range of the specified array of doubles.  The range to be filled* extends from index <tt>fromIndex</tt>, inclusive, to index* <tt>toIndex</tt>, exclusive.  (If <tt>fromIndex==toIndex</tt>, the* range to be filled is empty.)** @param a the array to be filled* @param fromIndex the index of the first element (inclusive) to be*        filled with the specified value* @param toIndex the index of the last element (exclusive) to be*        filled with the specified value* @param val the value to be stored in all elements of the array* @throws IllegalArgumentException if <tt>fromIndex &gt; toIndex</tt>* @throws ArrayIndexOutOfBoundsException if <tt>fromIndex &lt; 0</tt> or*         <tt>toIndex &gt; a.length</tt> */public static void fill(double[] a, int fromIndex, int toIndex,double val){rangeCheck(a.length, fromIndex, toIndex); for (int i = fromIndex; i < toIndex; i++)a[i] = val;} /** * Assigns the specified float value to each element of the specified array* of floats.** @param a the array to be filled* @param val the value to be stored in all elements of the array */public static void fill(float[] a, float val) {for (int i = 0, len = a.length; i < len; i++)a[i] = val;} /** * Checks that {@code fromIndex} and {@code toIndex} are in* the range and throws an exception if they aren't. */private static void rangeCheck(int arrayLength, int fromIndex, int toIndex) { if (fromIndex > toIndex) { throw new IllegalArgumentException( "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");} if (fromIndex < 0) { throw new ArrayIndexOutOfBoundsException(fromIndex);} if (toIndex > arrayLength) {throw new ArrayIndexOutOfBoundsException(toIndex);}}
  1. int[] copyOf(int[] original, int newLength)、int[] copyOfRange(int[] original, int from, int to)

存在多个重载方式,此处以int举例

从样例中我i们看到,copyOf复制后的数组长度可以大于复制前的数组,根据源码发现,超出的元素被填充为0,引用类型则填充为null

int[] array = new int[]{1,2,3}; 
int[] array2 = Arrays.copyOf(array, 4);
public static int[] copyOf(
int[] original, int newLength) { 
int[] copy = new int[newLength];System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));return copy;}

对于copyOfRange,可以选择复制的开头和结尾(不包括),且结尾下标可以大于原数组长度,超出的下标会被填充

int[] array = new int[]{1,2,3,4,5,6,7,8,9}; 
int[] array2 = Arrays.copyOfRange(array, 3, 6); 
int[] array3 = Arrays.copyOfRange(array, 3, 10);
   /** * Copies the specified range of the specified array into a new array.* The initial index of the range (<tt>from</tt>) must lie between zero* and <tt>original.length</tt>, inclusive.  The value at* <tt>original[from]</tt> is placed into the initial element of the copy* (unless <tt>from == original.length</tt> or <tt>from == to</tt>).* Values from subsequent elements in the original array are placed into* subsequent elements in the copy.  The final index of the range* (<tt>to</tt>), which must be greater than or equal to <tt>from</tt>,* may be greater than <tt>original.length</tt>, in which case* <tt>0</tt> is placed in all elements of the copy whose index is* greater than or equal to <tt>original.length - from</tt>.  The length* of the returned array will be <tt>to - from</tt>.** @param original the array from which a range is to be copied* @param from the initial index of the range to be copied, inclusive* @param to the final index of the range to be copied, exclusive.*     (This index may lie outside the array.)* @return a new array containing the specified range from the original array,*     truncated or padded with zeros to obtain the required length* @throws ArrayIndexOutOfBoundsException if {@code from < 0}*     or {@code from > original.length}* @throws IllegalArgumentException if <tt>from &gt; to</tt>* @throws NullPointerException if <tt>original</tt> is null* @since 1.6 */public static int[] copyOfRange(int[] original, int from, int to) { int newLength = to - from; if (newLength < 0) throw new IllegalArgumentException(from + " > " + to); int[] copy = new int[newLength];System.arraycopy(original, from, copy, 0,Math.min(original.length - from, newLength)); return copy;}

4.boolean equals(int[] a, int[] a2)、boolean equals(Object[] a, Object[] a2)

比较2个数组是否相等,基本类型的元素会依次进行==判断,引用类型则会在判空后使用equal

public static boolean equals(int[] a, int[] a2) { if (a==a2) return true; if (a==null || a2==null) return false; int length = a.length; if (a2.length != length) return false; for (int i=0; i<length; i++) if (a[i] != a2[i]) return false; return true;} public static boolean equals(Object[] a, Object[] a2) { if (a==a2) return true; if (a==null || a2==null) return false; int length = a.length; if (a2.length != length) return false; for (int i=0; i<length; i++) {Object o1 = a[i];Object o2 = a2[i]; if (!(o1==null ? o2==null : o1.equals(o2))) return false;} return true;}

5.String toString(int[] a)

假设我们想输出一个数组的全部元素,一种方法是利用循环遍历所有元素后挨个输出

但Arrays提供了一个方案可以直接调用,toString内部实现其实也是通过遍历来实现,

利用可变字符串StringBuilder来构建

public static String toString(int[] a) { 
if (a == null) return "null"; int iMax = a.length - 1; if (iMax == -1) return "[]";StringBuilder b = new StringBuilder();b.append('['); for (int i = 0; ; i++) {b.append(a[i]); if (i == iMax) return b.append(']').toString();b.append(", ");}}
  1. int binarySearch(int[] a, int key)

Arrays内置的二分查找方法,使用条件为参数数组a是有序的,如无序

会导致返回结果错误

1  public static int binarySearch(int[] a, int fromIndex, int toIndex, 
2                                    int key) { 
3         rangeCheck(a.length, fromIndex, toIndex);4         return binarySearch0(a, fromIndex, toIndex, key); 5     }6 7     // Like public version, but without range checks.8     private static int binarySearch0(int[] a, int fromIndex, int toIndex, 9                                      int key) { 10         int low = fromIndex; 11         int high = toIndex - 1; 12 
13         while (low <= high) {14             int mid = (low + high) >>> 1; 15             int midVal = a[mid]; 16 
17             if (midVal < key) 
18                 low = mid + 1; 
19             else if (midVal > key) 
20                 high = mid - 1; 
21             else
22                 return mid; // key found
23 } 
24         return -(low + 1);  // key not found.
25     }

最后,祝大家早日学有所成,拿到满意offer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DNS(三)--子域授权和视图

实验题目&#xff1a;1.子域授权&#xff08;委派&#xff09;2.视图实验环境&#xff1a;1.vmware虚拟机2.linux子机两台3.XP测试机实验过程&#xff1a;一、子域授权在现实生活中我们世界互联网中的每个主机并不是在同一个域内&#xff0c;而是通过不同的依据将将其划分到不同…

11尺寸长宽 iphone_LED显示屏的尺寸规格计算方法

LED屏幕在生活中&#xff0c;随处可见&#xff0c;显示屏、广播屏等等&#xff0c;但是LED尺寸怎么计算的&#xff0c;你知道吗&#xff1f;今天我们来了解一下LED屏幕尺寸的计算方法。一、点间距的计算1、各单元板常见型号及尺寸LED屏普遍是用单元板做的。LED单元板常见型号及…

盘点数学里十大不需语言的证明

全世界只有3.14 % 的人关注了爆炸吧知识当谈到复杂数学定理的证明时&#xff0c;很多人常常为之色变&#xff0c;认为这只是一个枯燥的公式堆砌和深奥的数学推导过程。这当然是一个让笔者感到纠结的误解。因为数学证明中包含的美丽与精巧实在是一道亮丽的风景线&#xff0c;而这…

好端端的程序员,咋就成了新生代农民工!

实锤&#xff0c;程序员被划为新生代农民工&#xff0c;码农的称号终获官方认定&#xff0c;网上一片热议。虽然农民工的称呼有点突兀&#xff0c;然而更多的评论都是在羡慕程序员的高薪&#xff0c;尤其是那些能进一线大厂的幸运儿。往年.NET进大厂难&#xff0c;而今年腾讯、…

大厂Java初级开发工程师!!!面试必问项之Set实现类:TreeSet

一、TreeSet 概述 1、TreeSet是 SortedSet 接口的实现类&#xff0c; TreeSet 可以确保集合元素处于排序状态。 2、TreeSet顾名思义他内部维护的是一个TreeMap&#xff0c;底层是红黑二叉树&#xff0c;他使得集合内都是有序的序列。 3、Tree可以按照添加对象的指定属性&…

【Android笔记】如何创建列表视图3

接着上一篇实现一个带有复选框的列表视图&#xff0c;这要求对Adapter有比较清楚的理解。1. ArrayAdapter从Layout读取TextView控件&#xff0c;返回给ListView显示&#xff0c;这个处理在ArrayAdapter的getView方法里&#xff0c;我们可以继承这个类&#xff0c;覆盖getView&…

史上最硬核的数学老师!搞发明、造大炮,让战斗民族直叫爸爸,看完我跪了......

全世界只有3.14 % 的人关注了爆炸吧知识一直以来&#xff0c;有好多朋友在后台和知识君吐槽&#xff0c;自己在追逐菲尔兹奖的路上总被数学公式所绊倒&#xff0c;一见到数学公式就头疼&#xff01;这时&#xff0c;知识君就会搬出数学史上最萌的公式——“么么哒”公式&#x…

a标签传参接收_[pyecharts1.8] 系列配置之标签设置

今日心情 &#xff1a;em....又是一堆蛋疼的事情堆积的一周...文章会迟到&#xff0c;但不会缺席&#xff0c;准备好脑子接收下[pyecharts1.8] 系列配置之标签设置本文档(以及pyecharts使用手册中的其他文档)将会持续更新。 有些内容标记为待更新的&#xff0c;有时间我会补充上…

这个寒冬,如何让我们的身价翻倍?

这个寒冬&#xff0c;如何让我们的身价翻倍&#xff1f; ——《深入理解.NET&#xff08;第2版英文版&#xff09;》读后感 微软4大名著评选结果揭晓 在开始正文之前&#xff0c;我先给大家讲一个真实的故事&#xff1a;我有一位朋友&#xff0c;他的一位同学原来是做测试的&am…

ASP.NET Core 配置 - 创建自定义配置提供程序

ASP.NET Core 配置 - 创建自定义配置提供程序在本文中&#xff0c;我们将创建一个自定义配置提供程序&#xff0c;从数据库读取我们的配置。我们已经了解了默认配置提供程序的工作方式&#xff0c;现在我们将实现我们自己的自定义配置提供程序。对于自定义配置提供程序&#xf…

为什么你的孩子拼命做题,成绩还总是上不去?

▲ 点击查看以前有句名言&#xff1a;“学好数理化&#xff0c;走遍天下都不怕。”这句话放到现在可能并不一定适用&#xff0c;但是数理化生仍然是在孩子整个学习生涯中&#xff0c;占比分量非常重的学科。然而&#xff0c;对很多孩子而言&#xff0c;学习数理化生却是很枯燥乏…

js请求结果拦截机器_CefSharp请求资源拦截及自定义处理

前言在CefSharp中&#xff0c;我们不仅可以使用Chromium浏览器内核&#xff0c;还可以通过Cef暴露出来的各种Handler来实现我们自己的资源请求处理。什么是资源请求呢&#xff1f;简单来说&#xff0c;就是前端页面在加载的过程中&#xff0c;请求的各种文本&#xff08;js、cs…

ListView

2019独角兽企业重金招聘Python工程师标准>>> ListView总结(多选框ListViiew,动态加载&#xff0c;多线程更新ListView中的进度条) convertView缓存及使用 ListView 更高效的使用 Adapter ListView中convertView和ViewHolder的工作原理 convertView&setTag方…

原来,程序的世界远比我想象的精彩

原来&#xff0c;程序的世界远比我想象的精彩 注&#xff1a;本文转载自http://www.cnblogs.com/dingxue/archive/2008/12/23/1360908.html&#xff0c;作者丁学。文中所有的 Pxx 指得是《Erlang程序设计》一书中的页码&#xff0c;书的信息放在文章最后。人都说无知者无畏&am…

【MSLearn 学习模块】Hi ! ⼀起来学Python

随着大数据、人工智能、物联网的兴起&#xff0c;Python越来越受到大家的关注。不论你是⼀位学生&#xff0c;是一位传统的码农&#xff0c;还是非计算机领域的从业人员都离不开Python。当然大家的角度不⼀样&#xff0c;作为学生是以学为主&#xff0c;码农是以用为主&#xf…

有趣的12张数学原理动图,令人舒心却又伤脑!你看懂几个?

全世界只有3.14 % 的人关注了爆炸吧知识下面的12张数学动图你能看懂几个&#xff0c;反正知识君是都看懂了。1.被简单证明的勾股定理给三角形加上一点厚度。从面积问题&#xff0c;跳转到了具象的体积问题。2.勾股定理的面积证明法Its a long story……慢慢看。3.周长和直径的π…

typora插入代码设置_Typora基本功能介绍

Typora是什么&#xff1f;提起Typora&#xff0c;如果是使用过Markdown的人&#xff0c;应该就不太陌生&#xff0c;Typora 是一款支持实时预览的 Markdown 文本编辑器。它有 OS X、Windows、Linux 三个平台的版本&#xff0c;并且由于仍在测试中&#xff0c;是完全免费的。在T…

【DotNetMLLearn】.NET Core人工智能系列-概述

.NETer大家好&#xff0c;今天为大家送上.NET Core 下如何完成人工智能应用的系列&#xff0c;希望给.NETer进入人工智能领域提供一个指引。.NET Core已经是一个全场景应用的技术栈方案&#xff0c;对于每一个领域都有支持。自从微软在开源发力后&#xff0c;.NET Core的社区能…

fanuc机器人控制柜接线_FANUC涂胶标定参考

FANUC涂胶标定参考1、进入SETUP界面2、选择DISPENCE界面3、选择15 flow rate control,按F2 detail进入4、进入标定界面此画面定义含义如下&#xff1a;(1)为涂胶标定单位,TCPP BEAD WIDTH宽度为基准(2)为 输入理想涂胶宽度,desired flow rate(3)为定义出胶轨迹sample program(一…

硬盘坏道修复白皮书

常识&#xff1a;硬盘坏道分类 - 不同坏道分仔细由于硬盘采用磁介质来存储数据&#xff0c;在经历长时间的使用或者使用不当之后&#xff0c;难免会发生一些问题&#xff0c;也就是我们通常所说的产生“坏道”&#xff0c;当然这种坏道有可能 是软件的错误&#xff0c;也有可能…