`
lirig
  • 浏览: 237586 次
  • 性别: 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
分享到:
评论

相关推荐

    Introduction to Java Programming(10th Edition)课后练习答案

    3. **数组与集合**:数组是存储同类型数据的基本结构,而集合框架(如ArrayList、LinkedList、HashSet、HashMap等)则提供了更灵活的数据存储方式。学习如何使用这些数据结构进行数据操作和算法实现是Java编程的重要...

    Java应用程序-习题-第8章.doc

    1. 在程序中声明一个 HashSet 集合类的对象 hset,将以下字符串元素添加到 hset 中:”hello”,”world”,”你好”,“Java”,“Java 泛型”和“Java 集合”。然后,用 hset 的 iterator 遍历该集合。

    Servlet面试题 – Java Web开发面试题.doc

    7. **使用ArrayList对象**:在JSP中使用Java集合类时,需要通过`…" %&gt;`导入相应的包。因此,正确答案是C。 8. **JavaBean规范**:JavaBean是遵循特定规范的Java类,通常为公共类且包含公共无参构造器。选项A和B不...

    Java程序设计教程.ppt

    4. **数组、字符串、向量与哈希表**:讨论这些数据结构的使用,字符串作为Java中的核心类型,向量(ArrayList)和哈希表(HashMap)是Java集合框架的一部分。 5. **泛型、枚举与for语句的简化写法**:泛型提供了...

    Java ArrayList删除特定元素的方法

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

    Java重点面试题 – 针对java面试过程中经常遇到的一些试题进行总结.docx

    Java面试中的核心知识点涵盖了许多方面,这里...以上内容涵盖了Java基础、面向对象、集合框架、多线程以及设计模式等关键知识点,这些都是Java面试中常见的问题。掌握这些知识点有助于提升面试成功率和实际开发能力。

    java超市管理list框架

    List是Java集合框架(Collections Framework)的一部分,它允许我们存储一组有序的对象,可以重复,并且支持索引访问。在这个系统中,List将被用来存储货物的信息,如商品ID、名称、价格、库存量等。 首先,我们...

    关于Java集合的小抄

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

    Java中各个包的主要作用

    `java.util`包提供了许多实用工具类,如集合框架、遗留的集合类、事件模型、日期和时间设施、国际化以及用于并发操作的实用工具等。例如: - **Collection Framework**:包括了`List`、`Set`、`Map`等接口及其实现...

    Java中的小知识 —– 集合

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

    Core Java, Volume II--Advanced Features(10th)

    Java集合框架是处理对象集合的重要工具。本书详细阐述了`List`、`Set`、`Map`接口及其实现类的使用,包括`ArrayList`、`LinkedList`、`HashSet`、`HashMap`等,以及高级集合类如`TreeSet`、`TreeMap`、`...

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

    在标题和描述中,我们关注的是“泛型集合”这个主题,它是Java集合框架的一部分。 泛型集合的概念可以理解为参数化类型,即将类型作为参数传递给集合类。这意味着我们可以限制集合只能存储特定类型的对象。例如,当...

    Java集合浅层理解

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

    Java中集合的使用

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

    core java2 volumn II 5e java2核心编程第5版卷II 高级特性

    这部分内容对于理解和使用Java集合框架至关重要,可以帮助开发者更高效地处理数据结构问题。 ### 网络编程(Networking) 网络编程是现代软件开发不可或缺的一部分,尤其是在互联网应用中。本书第三章详细介绍了...

    BA.zip_ba_ba网络_复杂网络_复杂网络 程序

    在Java中,可以使用ArrayList或LinkedList等集合类来构建这样的数据结构。每个节点表示一个对象,边则表示节点之间的连接。 **算法实现** 1. **初始化**:程序开始时,先创建一定数量的初始节点,它们随机连接,...

    Java_masterclass

    4. **集合框架**:Java集合框架是存储和操作对象的重要工具,包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。深入理解它们的特点和使用场景,以及泛型的运用。 5. **IO流**...

    java斗地主适合初学者

    - **数据结构**:理解并使用数组、集合框架(如ArrayList、LinkedList)来存储和操作牌的序列,以及玩家的状态。 - **控制结构**:用if-else语句、switch-case进行条件判断,实现发牌、出牌等逻辑。 2. **图形...

    学Java的第十六天–数组练习题

    set.add(i)) { // 如果add返回false,说明已经是集合内的元素 duplicates.add(i); } else { set.add(i); } } return duplicates; } ``` 以上就是关于Java数组的基础知识及一些练习题的解答思路,希望对学习...

Global site tag (gtag.js) - Google Analytics