`
night_lone
  • 浏览: 63368 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java.util#Arrays.java初读

    博客分类:
  • J2SE
阅读更多
Array类封装了很多操作数组的方法。如:排序(sort)和寻找(search)等。也封装了一个静态工厂可以让数组看做list来操作。
Array中的方法都会抛出一个NullPointerException异常。条件:当Array为null时。
Array类属于java集合框架的一个成员。
主要封装了以下方法:
  1. private Arrays();默认的私有构造方法;
  
  2.public static void sort(A[] a) 对各种基本类型的数组进行调优了的快速排序,为升序。
A可以为long,int,float,char,byte,double,short型。它具体实现是:调用sort1(a, 0, a.length);方法

  3.public static void sort(A[] a, int fromIndex, int toIndex)对数组的一段范围内的元素进行升序排序。范围为:从fromIndex到toIndex。  它具体实现: rangeCheck(a.length, fromIndex, toIndex);//检查索引是否合法
sort1(a, fromIndex, toIndex-fromIndex);
 
  4.public static int binarySearch(A[] a,  A key)在数组中寻找值为key的元素,在调用此方法前,必须调用sort()方法进行排序。具体实现:return binarySearch0(a, 0, a.length, key);

  5.public static int binarySearch(A[] a, int fromIndex, int toIndex, A key)寻找一个范围的元素。返回int型的索引。具体实现:rangeCheck(a.length, fromIndex, toIndex); return binarySearch0(a, fromIndex, toIndex, key);

  6. public static boolean equals(A[] a, A[] a2)如果两个数组包含相同的元素,在相同的位置。 In other words, two arrays  are equal if they contain the same elements in the same order.  Also, two array references are considered equal if both are null。

  7.public static void fill(A[] a, A val) 给数组中的每个元素填充一个值。具体实现:
                 fill(a, 0, a.length, val);
val 就是那个值将存储在每个数组元素中。

  8.public static void fill(A[] a, int fromIndex, int toIndex, long  val) 填充数组的一个范围。  具体实现:
     rangeCheck(a.length, fromIndex, toIndex);
     for (int i=fromIndex; i<toIndex; i++)
            a[i] = val;

    public static <T> A[] copyOf(T[] original, int newLength)复制数组
    具体实现:
             return (A[]) copyOf(original, newLength, original.getClass());


9. public static A[] copyOfRange(A[] original, int from, int to)//复制数组的一个范围

  10.public static <T> List<T> asList(T... a) //返回一个固定大小的list,list是数组a的备份。这个方法就象array-based 和 collection-based APIs间的桥梁。返回的list是serializable的 ,实现了RandomAccess接口。
          具体实现: return new ArrayList<T>(a);

   private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;

ArrayList(E[] array) {
            if (array==null)
                throw new NullPointerException();
    a = array;
}

public int size() {
    return a.length;
}

public Object[] toArray() {
    return a.clone();
}

public <T> T[] toArray(T[] a) {
    int size = size();
    if (a.length < size)
return Arrays.copyOf(this.a, size,
     (Class<? extends T[]>) a.getClass());
    System.arraycopy(this.a, 0, a, 0, size);
    if (a.length > size)
a[size] = null;
    return a;
}
    
public E get(int index) {
    return a[index];
}

public E set(int index, E element) {
    E oldValue = a[index];
    a[index] = element;
    return oldValue;
}

        public int indexOf(Object o) {
            if (o==null) {
                for (int i=0; i<a.length; i++)
                    if (a[i]==null)
                        return i;
            } else {
                for (int i=0; i<a.length; i++)
                    if (o.equals(a[i]))
                        return i;
            }
            return -1;
        }

        public boolean contains(Object o) {
            return indexOf(o) != -1;
        }
    }


11.public static int hashCode(A a[]) 返回一个基于数组内容的haccode,如果两个数组的相等,则它们返回的hashCode也相同。
        具体实现:
        if (a == null)
            return 0;

        int result = 1;
        for (long element : a) {
            int elementHash = (int)(element ^ (element >>> 32));
            result = 31 * result + elementHash;
        }

        return result;


12.public static int deepHashCode(Object a[])

13.public static String toString(A[] 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(", ");
        }


14.public static String deepToString(Object[] a)

sort()快速排序具体的实现代码在API中。
分享到:
评论

相关推荐

    java.util包

    Java.util包是Java标准库中的核心包之一,它包含了大量用于通用编程的类和接口,是Java开发中不可或缺的一部分。这个包提供了数据结构、集合框架、事件处理、日期时间、随机数生成、位集以及与I/O流操作相关的辅助...

    java.util包总结

    Java.util包是Java标准库中的核心包之一,它包含了大量用于日常编程的工具类和接口。这个包在Java 2版本中得到了显著增强,引入了许多重要的数据结构和算法,为Java程序员提供了更丰富的功能。 首先,Java.util包中...

    com.springsource.edu.emory.mathcs.backport-3.1.0.jar

    com.springsource.edu.emory.mathcs.backport-3.1.0.jar

    java代码-import java.util.Scanner;

    在Java编程语言中,`import java.util.Scanner;` 是一个非常基础且重要的语句,它引入了`java.util.Scanner`类。这个类是Java标准库的一部分,主要用于从各种输入源读取数据,如键盘、文件、系统环境变量等。在这个...

    《Java设计模式》课后习题参考答案-刘伟(20180723).pdf

    - java.util.Arrays#asList(),返回一个固定大小的列表。 - java.util.ResourceBundle#getBundle(),加载资源束。 ***.URL#openConnection(),创建一个URL连接实例。 - java.sql.DriverManager#getConnection()...

    JAVA设计模式在JDK中的应用

    - `java.util.Arrays#asList()`: 将数组转换为列表。 - `javax.swing.JTable(TableModel)`: 使用`TableModel`作为数据模型的适配器。 - `java.io.InputStreamReader(InputStream)`: 从输入流中读取字符。 - `java.io...

    java的.awt包和java.util包的区别

    ### Java的.awt包和.java.util包的区别 #### Java.util包详解 Java.util包是一个非常重要的标准库之一,其中包含了大量有用的类和接口,为开发者提供了丰富的功能。此包中的类和接口可以分为以下几大类别: 1. **...

    JDK中的设计模式

    - `java.util.Arrays#asList()`:用于将数组转换为列表。 - `java.util.ResourceBundle#getBundle()`:用于获取资源绑定到特定的区域设置。 - `java.net.URL#openConnection()`:打开一个到URL引用的资源的连接。 - ...

    arraystest.java

    java.util数组操作代码,数组复制,数组排序,数组赋值,数组相等判断

    过滤重复整数代码案例-java.doc

    import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class RemoveDuplicates { public static void main(String[] args) { // 定义一个包含重复整数的数组 int[] nums = {1, 2, ...

    SpringSource CoreSpring认证考试题库.docx

    解释:在 Spring 框架中,需要在 Java 主方法中实例化 ApplicationContext 对象,以便启动 Spring 应用程序。 第 4 题 题目:Consider the following code sample which creates an ApplicationContext from a file...

    Java实训教程 Java软件开发实战 Java类库 第4章 集合操作 共31页.pptx

    - **类介绍**:`java.util.Arrays` 类提供了大量的静态方法来操作数组。这些方法包括排序、搜索、填充等。 - **排序**: - `sort()` 方法可以对指定的数组内容进行排序,排序后的数组元素按照自然顺序或自定义比较...

    JDK中的23个设计模式简介

    例如,java.util.Calendar#getInstance() 方法将创建一个 Calendar 对象,java.util.Arrays#asList() 方法将创建一个 List 对象。 9. 生成器模式(Builder Pattern) 生成器模式是指将一个复杂的对象分步骤创建。...

    28个java常用的工具类

    1. **`java.util.Arrays`**: 这个类提供了对数组进行排序、查找、复制等操作的方法,如`Arrays.sort()`用于排序数组,`Arrays.asList()`将数组转换为列表。 2. **`java.util.Collections`**: 类似于`Arrays`,但...

    java.util源码-java-util:javautil源代码

    7. **实用工具类**:`java.util.Arrays`和`java.util.Collections`提供静态方法,用于操作数组和集合,如排序、复制和填充。 8. **并发编程**:`java.util.concurrent`包虽然不在`java.util`下,但与之紧密相关,...

    30个常用java工具类

    2. **`java.util.Arrays`**:提供了一系列静态方法来操作数组,包括排序、复制、填充和比较等。 3. **`java.util.Collections`**:与`Arrays`类似,但针对集合框架中的接口和类,如`List`、`Set`和`Map`,提供排序...

    com.springsource.edu.emory.mathcs.backport_3.1.0

    com.springsource.edu.emory.mathcs.backport_3.1.0.jar

Global site tag (gtag.js) - Google Analytics