⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unorderlist.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $RCSfile: UnorderList.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Use is subject to license terms. * * $Revision: 1.4 $ * $Date: 2007/02/09 17:18:29 $ * $State: Exp $ */package javax.media.j3d;import java.util.Arrays;/** * A strongly type unorder array list. * The operation add(Object o) & remove(int i) take O(1) time. * The class is designed to optimize speed. So many reductance * procedures call and range check as found in ArrayList are  * removed. * * <p> * Use the following code to iterate through an array. * * <pre> *  UnorderList  list = new UnorderList(YourClass.class); *  // add element here * *  YourClass[] arr = (YourClass []) list.toArray(); *  int size = list.arraySize(); *  for (int i=0; i < size; i++) { *      YourClass obj = arr[i]; *      .... *  } * </pre> * * <p> * Note: * <ul> * 1) The array return is a copied of internal array.<br> * 2) Don't use arr.length , use list.arraySize();<br> * 3) No need to do casting for individual element as in *    ArrayList.<br> * 4) UnorderList is thread safe. * </ul> */class UnorderList implements Cloneable, java.io.Serializable  {    /**     * The array buffer into which the elements of the ArrayList are stored.     * The capacity of the ArrayList is the length of this array buffer.     *     * It is non-private to enable compiler do inlining for get(),     * set(), remove() when -O flag turn on.     */    transient Object elementData[];        /**     * Clone copy of elementData return by toArray(true);     */    transient Object cloneData[];    // size of the above clone objec.    transient int cloneSize;    transient boolean isDirty = true;    /**     * Component Type of individual array element entry     */    Class componentType;    /**     * The size of the ArrayList (the number of elements it contains).     *     * We make it non-private to enable compiler do inlining for     * getSize() when -O flag turn on.     */    int size;    /**     * Constructs an empty list with the specified initial capacity.     * and the class data Type     *     * @param   initialCapacity   the initial capacity of the list.     * @param   componentType     class type of element in the list.     */     UnorderList(int initialCapacity, Class componentType) {	this.componentType = componentType;	this.elementData = (Object[])java.lang.reflect.Array.newInstance(					 componentType, initialCapacity);    }    /**     * Constructs an empty list.     * @param   componentType     class type of element in the list.     */    UnorderList(Class componentType) {	this(10, componentType);    }    /**     * Constructs an empty list with the specified initial capacity.     *     * @param   initialCapacity   the initial capacity of the list.     */    UnorderList(int initialCapacity) {	this(initialCapacity, Object.class);    }    /**     * Constructs an empty list.     * componentType default to Object.     */    UnorderList() {	this(10, Object.class);    }      /**     * Returns the number of elements in this list.     *     * @return  the number of elements in this list.     */    final int size() {	return size;    }      /**     * Returns the size of entry use in toArray() number of elements      * in this list.     *     * @return  the number of elements in this list.     */    final int arraySize() {	return cloneSize;    }    /**     * Tests if this list has no elements.     *     * @return  <tt>true</tt> if this list has no elements;     *          <tt>false</tt> otherwise.     */    final boolean isEmpty() {	return size == 0;    }    /**     * Returns <tt>true</tt> if this list contains the specified element.     *     * @param o element whose presence in this List is to be tested.     */    synchronized final boolean contains(Object o) {	if (o != null) { // common case first	    for (int i=size-1; i >= 0; i--)		if (o.equals(elementData[i]))		    return true;	} else {	    for (int i=size-1; i >= 0; i--)		if (elementData[i]==null)		    return true;	}	return false;    }    /**     * Add Object into the list if it is not already exists.     *     * @param  o an object to add into the list     * @return true if object successfully add, false if duplicate found     */    synchronized final boolean addUnique(Object o) {	if (!contains(o)) {	    add(o);	    return true;	}	return false;    }    /**     * Searches for the last occurence of the given argument, testing      * for equality using the <tt>equals</tt> method.      *     * @param   o   an object.     * @return  the index of the first occurrence of the argument in this     *          list; returns <tt>-1</tt> if the object is not found.     * @see     Object#equals(Object)     */    synchronized final int indexOf(Object o) {	if (o != null) { // common case first	    for (int i=size-1; i >= 0; i--)		if (o.equals(elementData[i]))		    return i;	} else {	    for (int i=size-1; i >= 0; i--)		if (elementData[i]==null)		    return i;	}	return -1;    }    /**     * Returns a shallow copy of this <tt>ArrayList</tt> instance.  (The     * elements themselves are not copied.)     *     * @return  a clone of this <tt>ArrayList</tt> instance.     */    synchronized protected final Object clone() {	try { 	    UnorderList v = (UnorderList)super.clone();	    v.elementData =  (Object[])java.lang.reflect.Array.newInstance(						   componentType, size);	    System.arraycopy(elementData, 0, v.elementData, 0, size);	    isDirty = true; // can't use the old cloneData reference	    return v;	} catch (CloneNotSupportedException e) { 	    // this shouldn't happen, since we are Cloneable	    throw new InternalError();	}    }    /**     * Returns an array containing all of the elements in this list.     * The size of the array may longer than the actual size. Use     * arraySize() to retrieve the size.      * The array return is a copied of internal array. if copy     * is true.     *     * @return an array containing all of the elements in this list     */    synchronized final Object[] toArray(boolean copy) {	if (copy) {	    if (isDirty) {		if ((cloneData == null) || cloneData.length < size) {		    cloneData = (Object[])java.lang.reflect.Array.newInstance(									      componentType, size);		}		System.arraycopy(elementData, 0, cloneData, 0, size);		cloneSize = size;		isDirty = false;	    }	    return cloneData;	} else {	    cloneSize = size;	    return elementData;	}     }    /**     * Returns an array containing all of the elements in this list.     * The size of the array may longer than the actual size. Use     * arraySize() to retrieve the size.      * The array return is a copied of internal array. So another     * thread can continue add/delete the current list. However,     * it should be noticed that two call to toArray() may return     * the same copy.     *     * @return an array containing all of the elements in this list     */    synchronized final Object[] toArray() {	return toArray(true);    }    /**     * Returns an array containing elements starting from startElement     * all of the elements in this list. A new array of exact size      * is always allocated.     *     * @param startElement starting element to copy      *     * @return an array containing elements starting from     *         startElement, null if element not found.     *     */    synchronized final Object[] toArray(Object startElement) {	int idx = indexOf(startElement);	if (idx < 0) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -