`
qiemengdao
  • 浏览: 276007 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java容器类分析之List、ArrayList、Vector

阅读更多

 

Java容器类分析之ListArrayListVector

List是接口,声明了各个方法,不多说。且看ArrayList类。


ArrayList类的成员变量有Object[] elementDataint size;其中elementData数组用来存储加入到ArrayList的对象,size为列表中实际的对象数目。ArrayList类不是线程安全的。

VectorArrayList的实现基本相同,只是Vector类是线程安全的,其方法都带有synchronized关键字,如果不考虑线程同步的话,ArrayList性能要好一些。当前它们内部实现原理都是用到对象数组来实现,如果元素数目确定,直接用数组效率最高。

 

简单的用法:(后面是数据打印结果)

public class ListDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		String[] strArr = new String[3];
		boolean ret = list.add("haha");
		list.add(new String("aa"));
		list.add(null); 
		System.out.println(list.size());//3
		System.out.println(ret);//true
		System.out.println(list);//[haha, aa, null]
		System.out.println(strArr);//[Ljava.lang.String;@1fee6fc
		System.out.println(strArr.getClass().getName());//[Ljava.lang.String;
		System.out.println(list.indexOf("aa"));//1
		System.out.println(list.indexOf(null));//2
		String str = list.set(1, "ee");
		System.out.println(str);//aa
		System.out.println(list);//[haha, ee, null]
		String remove = list.remove(0);
		System.out.println(remove);//haha
		System.out.println(list);//[ee, null]
		boolean result = list.remove("ff");
		System.out.println(result);//false
		result = list.remove("ee");
		System.out.println(result);//true
		System.out.println(list);//[null]
	}

}
 

 

public ArrayList() {
	this(10);
    }
 public ArrayList(int initialCapacity) {
	super();
        	if (initialCapacity < 0)
           		 throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
	this.elementData = new Object[initialCapacity];
    }
   public boolean add(E e) {
	ensureCapacity(size + 1);  // Increments modCount!!
	elementData[size++] = e;
	return true;
    }



/*移除指定位置元素,注意每次移除数据都会将数组中后面数据移动来填充数组*/
 public E remove(int index) {
	RangeCheck(index);

	modCount++;
	E oldValue = (E) elementData[index];

	int numMoved = size - index - 1;
	if (numMoved > 0)
	    System.arraycopy(elementData, index+1, elementData, index,
			     numMoved);
	elementData[--size] = null; // index后面数据依次往前移动,将最后一个位置赋值为0,让gc来回收空间。
	return oldValue;
    }

public void ensureCapacity(int minCapacity) {
	modCount++;//这个变量不用管。
	int oldCapacity = elementData.length; //初始时设定的数组长度
	if (minCapacity > oldCapacity) {    //如果数组对象数目>初始数组长度,则需要扩容。
	    Object oldData[] = elementData;
	    int newCapacity = (oldCapacity * 3)/2 + 1; //新的容量大小
    	    if (newCapacity < minCapacity)
		newCapacity = minCapacity;
	 /*该方法会创建一个新的对象数组,然后调用  System.arraycopy(original, 0, copy, 0,
                Math.min(original.length, newLength));方法将源数组数据拷贝到新数组中。引用更新,指	向新的对象数组。*/
            	   elementData = Arrays.copyOf(elementData, newCapacity); 
	}
    }

/*将对象数组削减到当前元素数目大小,减少存储空间*/   
public void trimToSize() { 
	modCount++;
	int oldCapacity = elementData.length;
	if (size < oldCapacity) {
            elementData = Arrays.copyOf(elementData, size);
	}
    }

/*查找对象首次出现的位置,若没有找到,返回-1。由
代码可知,可以在list中加入null对象,并查找到。*/
 public int indexOf(Object o) {
	if (o == null) {
	    for (int i = 0; i < size; i++)
		if (elementData[i]==null)
		    return i;
	} else {
	    for (int i = 0; i < size; i++)
		if (o.equals(elementData[i]))
		    return i;
	}
	return -1;
    }

/*替换指定位置的元素值,返回该位置中old值*/
public E set(int index, E element) {
	RangeCheck(index); //检查范围
	E oldValue = (E) elementData[index];
	elementData[index] = element;
	return oldValue;
    }

/*返回指定位置的值*/
public E get(int index) {
	RangeCheck(index);

	return (E) elementData[index];
    }

 private void RangeCheck(int index) {
	if (index >= size)
	    throw new IndexOutOfBoundsException(
		"Index: "+index+", Size: "+size);
    }
  public int size() {
	return size;
    }

    public boolean isEmpty() {
	return size == 0;
    }
  
 

 

分享到:
评论

相关推荐

    Java容器类List、ArrayList、Vector及map、HashTable应用

    Java容器类List、ArrayList、Vector及map、HashTable应用 List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的...

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别

    List、ArrayList、Vector及map、HashTable、HashMap是Java容器类中的几个重要的接口和实现类,了解它们之间的区别是非常重要的。 首先,我们来看List和ArrayList的区别。List是一个接口,而ArrayList是一个实现了...

    JAVA容器效率深度分析List

    本文将深入分析Java中的List接口及其常见的实现类,如ArrayList、LinkedList和Vector,探讨它们的效率差异和适用场景。 首先,List是Java集合框架中的一个重要接口,它扩展了Collection接口,并规定了元素的有序性...

    Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.

    Java中的容器类是Java集合框架的重要组成部分,它们用于存储和管理数据。在Java中,主要有两种类型的容器:List和Map。List是有序的集合,而Map则是键值对的存储结构。 1. List接口与ArrayList类 List是一个接口,...

    java 集合类 容器类

    ### Java集合类与容器类详解 #### 一、引言 在Java编程中,集合类是一种非常重要的数据结构,用于存储一系列对象。相比于数组,集合类提供了更多的灵活性和功能,尤其是在处理未知数量的对象时更为方便。Java标准...

    Java中Vector与ArrayList的区别详解

    Java中的ArrayList和Vector都是列表(List)接口的实现类,它们在功能上相似,但在细节上存在一些重要的差异。这两个类都是基于数组实现的,但它们的性能特点、线程安全性和扩容策略有所不同。 1. **扩容策略**: ...

    Java容器类的深入理解

    Java容器类是Java编程中非常重要的一部分,它们为数据存储提供了丰富的结构和操作。本文主要关注的是Java中的两种主要容器类型:Collection和Map,以及它们的一些具体实现,如List接口下的ArrayList、LinkedList和...

    迅速掌握Java容器中常用的ArrayList类与Vector类用法

    ArrayList和Vector是两种常用的容器类,它们都实现了List接口,属于Java集合框架的一部分。本篇文章将详细探讨这两个类的用法及其基本功能。 首先,我们来看ArrayList类。ArrayList是一个基于数组的动态列表,它...

    Java 容器类的解析及对比

    本文将详细解析并对比Java中的各种容器类,特别是`Collection`、`List`、`ArrayList`、`Vector`以及`Map`、`HashTable`、`HashMap`的区别。这些知识点对于面试复习尤其重要。 #### 二、基础概念 - **`Collection`*...

    Java容器类学习心得.pdf

    本篇文章将重点介绍Java容器类中Collection接口、Map接口、Iterator接口以及List、Set和Map的实现类。 首先,Collection接口是容器类层次结构的核心,它是单列集合的主要根接口。Collection接口的主要方法包括add...

    java练习题--容器使用练习

    7. 容器与多线程:学习在多线程环境中使用容器,了解线程安全问题,例如同步容器类(如Vector、HashTable)和并发容器类(如ConcurrentHashMap、CopyOnWriteArrayList)。 8. 泛型:利用泛型在容器中存储特定类型的...

    Arraylist、Hashtable、Vector

    在Java编程语言中,ArrayList、Hashtable和Vector是三种常见的数据结构,它们都用于存储和管理对象,但各有特点和适用场景。以下是对这三个容器的详细解释: ArrayList是Java集合框架中的一部分,它实现了List接口...

    Java 容器.pdf_电子版pdf版

    2. List:有序的集合,常用的实现类有 ArrayList、Vector、LinkedList 等。 * ArrayList:基于动态数组实现,支持随机访问。 * Vector:和 ArrayList 类似,但它是线程安全的。 * LinkedList:基于双向链表实现,...

    Java容器类PPT课件.pptx

    Java容器类是Java编程语言中用于管理和操作对象集合的重要组成部分,它们主要集中在`java.util`包下。在Java集合框架中,"容器"通常指的是能够存储一组对象的类或者接口。这个框架为开发者提供了灵活的方式来存储、...

    java容器(持有对象)

    在Java编程中,容器是用来存储和管理对象的类或接口,...总之,Java中的容器类提供了灵活的方式来存储和操作对象,理解并熟练掌握List、Set、Map及其各自实现类的特性和使用场景,对于编写高效、可维护的代码至关重要。

    JAVA容器总结

    Java容器,主要包括集合框架中的Set、List、Map和Queue接口,它们是Java编程中处理数据的重要工具。下面将对这些接口及其常见的实现类进行详细解释。 1. **Set接口**: Set接口代表一个无序且不允许重复元素的集合...

    Java容器简要介绍

    本文将简要介绍Java容器的主要概念、API以及常用的容器类。 首先,Java容器分为两大主要类别:Collection和Map。Collection是所有单值容器的父接口,包括List、Set和Queue等子接口。List接口代表有序的集合,允许有...

    JAVA提高第十篇 ArrayList深入分析

    ArrayList是Java集合框架中常用的类,它继承自AbstractList,并实现了List接口,提供了一种基于动态数组的数据存储方式。ArrayList的主要优点在于它提供了快速的随机访问,但由于它是基于数组实现的,所以在插入和...

    详解Java中Vector和ArrayList的区别

    在Java编程语言中,`ArrayList`和`Vector`都是实现`List`接口的容器类,它们主要用于存储和管理有序的元素集合。虽然两者都基于数组实现,但在功能特性和性能上存在显著差异。 1. **数据结构实现**: - `ArrayList...

Global site tag (gtag.js) - Google Analytics