java 接口RandomAccess

接口 RandomAccess

所有已知实现类:
ArrayList,  AttributeList,  CopyOnWriteArrayList,  RoleList,  RoleUnresolvedList,  Stack,  Vector
public interface RandomAccess

List 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。

将操作随机访问列表的最佳算法(如 ArrayList)应用到连续访问列表(如 LinkedList)时,可产生二次项的行为。如果将某个算法应用到连续访问列表,那么在应用可能提供较差性能的算法前,鼓励使用一般的列表算法检查给定列表是否为此接口的一个 instanceof,如果需要保证可接受的性能,还可以更改其行为。

现在已经认识到,随机和连续访问之间的区别通常是模糊的。例如,如果列表很大时,某些 List 实现提供渐进的线性访问时间,但实际上是固定的访问时间。这样的 List 实现通常应该实现此接口。实际经验证明,如果是下列情况,则 List 实现应该实现此接口,即对于典型的类实例而言,此循环:

     for (int i=0, n=list.size(); i < n; i++)
         list.get(i);
 

的运行速度要快于以下循环:

     for (Iterator i=list.iterator(); i.hasNext(); )
         i.next();

使用标记接口可以使用类型查询,例如:

if( list instanceof RandomAccess){}

package com.java.coutClass;

import java.util.Iterator;
import java.util.List;
import java.util.RandomAccess;

public class RandomAccessClass {

	public static void PrintList(List list) {

		if (list instanceof RandomAccess) {

			for (int i = 0; i < list.size(); i++) {

				System.out.println("标记接口Random" + list.get(i));
			}

		} else {
			for (Iterator it = list.iterator(); it.hasNext();) {

				System.out.println(it.next());
			}

		}

	}

}

package com.java.coutClass;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class RanTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		List<String>  arr=new ArrayList<String>();
		
		arr.add("测试标记接口@!!1");
		arr.add("测试标记接口@!!2");
		arr.add("测试标记接口@!!3");
		RandomAccessClass.PrintList(arr);
		
		List<String>   link=new LinkedList<String>();
		link.add("我没有标记接口!!1");
		link.add("我没有标记接口!!2");
		link.add("我没有标记接口!!3");
		link.add("我没有标记接口!!4");
		RandomAccessClass.PrintList(link);
	}

}

运行结果:

标记接口Random测试标记接口@!!1
标记接口Random测试标记接口@!!2
标记接口Random测试标记接口@!!3
我没有标记接口!!1
我没有标记接口!!2
我没有标记接口!!3
我没有标记接口!!4

这里没有计算他们的运行时间,有兴趣的同学可以自己试试。

其他类型的标记接口:

java.io.Serializable

未实现此接口的类将无法使其任何状态序列化或反序列化.为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值.

java.lang.Cloneable

表明Object.clone()方法可以合法地对该类实例进行按字段复制.实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的).如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常.

java.util.RandomAccess

用来表明其支持快速(通常是固定时间)随机访问.此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能.

java.rmi.Remote                            

Remote 接口用于标识其方法可以从非本地虚拟机上调用的接口.任何远程对象都必须直接或间接实现此接口.只有在“远程接口”(扩展 java.rmi.Remote 的接口)中指定的这些方法才可远程使用.


你可能感兴趣的:(java,Random,iterator,interface,LinkedList)