`
lirig
  • 浏览: 235259 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java集合分析之–1. ArrayList分析

    博客分类:
  • Jave
阅读更多

 


由于公司最近要招聘java项目经理,面试了好几个工作了7年以上的应聘人员,当时问到java集合时,涉及到其中原理,没有几个能说清楚的.由于公司对项目经理要求比较高,对代码评审能全盘把握.所以涉及到的java问题比较多.其实作为一个工作了好几年的java的技术人员或者项目经理,对java的基础理应比较熟悉.正好自己也整理下集合中几个常用的类,希望大家发表意见.

 

在java的集合中比较常用的的是list接口,实现list接口最常用的为Arraylist,LinkList,Vector等.下面分别介绍下.

ArrayList是比较常用的数据,创建一个对象为:ArrayList array=new ArrayList();ArrayList内部实现为:

    public ArrayList(int initialCapacity) {

super();

        if (initialCapacity < 0)

            throw new IllegalArgumentException("Illegal Capacity: "+

                                               initialCapacity);

this.elementData = new Object[initialCapacity];

    }

    public ArrayList() {

this(10);

    }

由上面代码可以得知ArrayList创建对象时为一个长度为10的数组,可以得知,ArrayList为数组结构,初始化长度为10.

 

ArrayList基本方法:

 

add(E)

往数组中增加对象,首先想到的是在已有数组长度加1,但是如果数组长度超出旧数组长度会是上面情况,通过查看源代码可以得知,如果新增加一个对象,数组长度超出原来数组长度,数组将会变成int newSize = (oldSize * 3)/2 + 1长度的数组;每次增加元素时,数组都要检查数组长度是否超出范围,如果超出范围就通过ensureCapacity(int minCapacity)方法扩展数组长度,在通过Arrays.copyOf方法生成新数组。

    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;

            // minCapacity is usually close to size, so this is a win:

            elementData = Arrays.copyOf(elementData, newCapacity);

}

    }

在ArrayList中还增加了add(index,E)方法,arraylist允许在指点位置插入对象,首先要判断index是否在数组范围之内,

    public void add(int index, E element) {

if (index > size || index < 0)

   throw new IndexOutOfBoundsException(

"Index: "+index+", Size: "+size);

 

ensureCapacity(size+1);  // Increments modCount!!

System.arraycopy(elementData, index, elementData, index + 1,

size - index);

elementData[index] = element;

size++;

    }

从代码中可以看出,首先要检查长度,和add(E)方法一样,然后把数组往后移动一位。

 

remove(E)

remove(E)为指点删除arraylist中的对象,如果E为null则遍历数组,查询数组是否为null,如果为null通过fastRemove方法删除数组,如果E不为null则直接通过equals判断对象,再删除。 在删除元素时,并不会减少数组容量,如果想减少数组容量,可以通过equals方法。

 

get(index)

get方法内部实现比较简单,先检查index是否在数组范围内,再返回对象。

 

contains(o)

判断arraylist中是否包含某个对象,contains分两不处理,第一步如果o为null,循环查找arraylist中,查看是否包含null的对象如果包含返回结果;第二步o不为null情况,循环查找arraylist对象,通过equals比较,返回结果。

 

其他:

 

  • ArrayList内部结构为数组,容量可以无限制增加
  • ArrayList为非程安全

后面我再对list和map的几个常用类进行性能比较.看看在高并发下应该用那些类

 

 

 

 

3
2
分享到:
评论

相关推荐

    学习Java第二十四天–集合框架之泛型集合

    泛型集合12.3.4 泛型集合泛型的场景:定义泛型:12.3.5 Colletions工具类 12.3.4 泛型集合 ...import java.util.ArrayList; import java.util.LinkedList; public class TestBasicGeneric { public s

    Java ArrayList删除特定元素的方法

    ArrayList是常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定元素。有几种常用的方法:  朴实的方法,使用下标的方式:  ArrayList&lt;String&gt;al=new ArrayList();  al.add("a");  al.add("b"); ...

    JAVA入门学习笔记(1)– Collection集合的基础知识

    集合类4.1 集合的实现类4.1.1 ArrayList 4.1.2 LinkedList 4.1.3 Vecotor4.1.4 HashSet 4.1.5 LinkedHashSet 4.2 Conllections工具类5. 集合的遍历5.1 迭代器5.2 增强for循环(jdk1.5+)* 附加知识点1.数据结构1.1 栈...

    关于Java集合的小抄

    在尽可能短的篇幅里,将所有集合与并发集合的特征,实现方式,性能捋一遍。适合所有”精通Java”其实还不那么自信的人阅读。  不断更新中,请尽量访问博客原文。  List  ArrayList  以数组实现。节约空间,...

    Java中的小知识 —– 集合

    为什么使用集合? 开发中会使用大量相同数据类型的情况,如果使用数组来解决...Java中集合的【总接口】Collection,Java中所有和集合有关的内容都是 Collection接口的子类或者实现类 interface Collection包含: int

    Java中的集合

    1. 集合 1.1 为什么使用集合 开发中会使用大量相同数据类型的情况。如果使用数组来解决问题 1. 数组能够使用的方法非常少,功能方法需要程序员自己完成。 2. 数据类型单一化,不支持多种情况。 3. 数组容量不可以...

    Java集合浅层理解

    集合 层次一:针对不同特点的数据,能够选择对应接口的主要的类进行实例化和方法的调用 层次二:熟悉接口的不同的实现类... |—–ArrayList/LinkedList/Vector  |—–Set:存储无序的、不可重复的数据: 高中的集合  

    Java中集合的使用

    在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现。...–ArrayList  Collection&lt;–List&lt;–LinkedList  Collection&lt;–Set&lt;–HashSet  

    Java面试考题锦集之Java基础

    Java List高频ArrayList和LinkedList的区别?分别用在什么场景?常见少见Java Set常见Set是有序的,这句话对吗?Java Map高频hashtable和hashmap的区别及实现原理,请你说明HashMap和Hashtable的区别?HashMap 和 ...

    Java大同之类集框架

    Java的类集框架可以使程序处理对象的方法标准化,使用迭代方法访问类集可以使对类集的操作效率更加高。被设计成类集框架的拥有以下几种特性: ...–ArrayList  Collection&lt;–List&lt;–LinkedList

    asp.net知识库

    Asp.net地址转义(分析)加强版 Web的桌面提醒(Popup) Using the Popup Object Click button only once in asp.net 2.0 Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制...

Global site tag (gtag.js) - Google Analytics