`

[面试]数组和arrayList的区别

    博客分类:
  • j2se
阅读更多

今天面试,问我数组和arrayList有什么区别?

我答不上来.

一、数组与ArrayList的主要区别:效率、类型识别和primitive type。
数组([]):最高效;但是其容量固定且无法动态改变;
ArrayList:容量可动态增长;但牺牲效率;
建议:
首先使用数组,无法确定数组大小时才使用ArrayList!



1.效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,

在这个临界点的扩容操作,应该来说是比较影响效率的。

ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于

ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

2.类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。

注:jdk5中加入了对泛型的支持,已经可以在使用ArrayList时进行类型检查。

从这一点上看来,ArrayList与数组的区别主要就是由于动态增容的效率问题了


3.ArrayList可以存任何Object,如String,Employee等,但不支持基本数据类型,除非使用wrapper。

二、数组与ArrayList的转换(有待补充:见《corejava》110页)
1.ArrayList转换为数组:
ArrayList转换String[]
ArrayList list = new ArrayList();list.add("a");list.add("b");list.add

("c");System.out.println("a="+list);String[] b=(String[])list.toArray

(new String[0]);

2.数组转换为ArrayList(有待补充)

三、Arrays类操纵java中的数组(有待补充)
http://java.ccidnet.com/art/3737/20060627/589715_1.html

四、实现DecisionTree时对ArrayList与String[]的迷惑与解铃(有待补充)

http://www.mysdn.cn/Java/J2SEjichulei/20060914/9172.html

(实际为数组与ArrayList的迷惑)

五、其他
1.数组和ArrayList都表示可以存一组同类型的对象;都使用下标定位和查找元素;
2.数组的定义:
int[] num=new int[10];
Employee[] staff=new Employee[100];

3.ArrayList的使用:
List lst=new ArrayList();
lst.add(employee);

分享到:
评论

相关推荐

    数组和集合

    在面试中,经常会有涉及数组和集合的问题,例如: 1. 如何理解Java中数组是作为类来实现的? 2. 在Java中使用数组和集合有什么不同的场景和优缺点? 3. 如何选择使用ArrayList还是LinkedList? 4. Set集合如何保证...

    java面试编程题(数组和链表相关) 数组和链表.pdf

    Java面试编程题(数组和链表相关) 本资源主要讲解了Java面试编程题中的数组和链表相关知识点,涵盖了Java编程语言中数组和链表的基本概念、算法和数据结构等方面的知识。 一、数组相关知识点 1. 、二维数组的...

    Java面试题-基础-集合有关的知名厂商面试题和基础复习

    ArrayList() 会使用长度为零的数组 ArrayList(int initialCapacity) 会使用指定容量的数组 public ArrayList(Collection<? extends E> c) 会使用 c 的大小作为数组容量 add(Object o) 首次扩容为 10,再次扩容为上次...

    java面试-leetcode面试java编程题解之第6题Z字形变换-java题解.zip

    1. 初始化一个二维数组或ArrayList,大小根据输入字符串长度和最大行数(通常是字符串长度/2+字符串长度%2)来确定。 2. 使用一个变量`row`表示当前行数,初始值为0。 3. 遍历输入字符串,每次取出一个字符。 4. ...

    ArrayList和Linkedlist1

    面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力。 1. **ArrayList**:ArrayList基于动态数组(顺序表)的数据结构,它内部维护了一个Object类型的数组。由于存储位置连续,ArrayList支持随机访问,通过...

    面试题涵盖Java数组常见操作和用法

    Java数组是编程中不可或缺的一部分,尤其在面试中,掌握其基本操作和用法至关重要。本文将深入探讨Java数组的各种知识点,帮助你准备相关的面试题目。 首先,了解Java数组的基础概念。数组是一种数据结构,用于存储...

    第8讲 对比Vector、ArrayList、LinkedList有何区别1

    这使得ArrayList在大多数情况下具有更好的性能,尤其是对于大量的插入和删除操作,因为它避免了不必要的数组复制。 LinkedList则是一种双向链表结构,因此它不支持快速的随机访问,但插入和删除操作非常高效,特别...

    ArrayList底层原理

    面试中可能会遇到关于ArrayList的问题,比如询问ArrayList和LinkedList的区别,或者如何优化ArrayList的性能。ArrayList更适合于元素的随机访问和遍历,而不适合频繁的插入和删除。如果插入和删除操作较多,...

    常见集合知识和面试题

    1. **Array和ArrayList有何区别?** - `Array`既可以容纳基本类型也可以容纳对象类型,而`ArrayList`只容纳对象类型。 - `Array`的大小是固定的,一旦创建后无法改变;而`ArrayList`的大小可以根据需要动态调整。 ...

    前端笔试面试题

    1. 数组与ArrayList:对比数组和ArrayList的优缺点,知道如何添加、删除和查找元素。 2. HashMap与HashSet:理解它们的工作原理,如哈希函数、扩容机制,并能解释线程不安全的原因。 3. LinkedList与ArrayList的...

    Java实习生面试复习(三):ArrayList

    ArrayList的主要特点是其内部基于数组(Object[] elementData)进行存储,因此它的操作速度对于随机访问非常快,但插入和删除元素时,特别是当元素不在末尾时,性能相对较慢,因为需要移动大量的元素。 在ArrayList...

    ArrayList源码分析.docx 等

    转换为其内部数组 `elementData`,然后根据转换后的数组长度设置 `size`。这里需要注意的是,如果 `c.toArray()` ...在面试中,深入理解 ArrayList 的源码和其与其他数据结构的区别是展示 Java 基础技能的重要方面。

    java面试汇总集合第一弹

    3. **集合框架**:这是Java面试中的重点,需要了解ArrayList、LinkedList、HashSet、HashMap、TreeSet、TreeMap等常见集合类的特性和应用场景。理解List、Set、Map接口,以及迭代器(Iterator)和泛型的使用。深入...

    当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

    在 Java 中,ArrayList 和 LinkedList 是两个常用的集合类,它们都是 List 接口的实现类,但它们之间有着鲜明的区别。今天,我们将深入探讨这两个集合类的实现原理和比较。 ArrayList 的实现原理 ArrayList 是基于...

    ArrayList.rar

    在这个深度复习中,我们将探讨ArrayList与其他相关集合类型如Hashtable、List以及Dictionary的区别和使用场景。 首先,ArrayList与Hashtable都是.NET框架中的旧式集合类型,它们不支持泛型,这意味着在存储数据时...

    阿里巴巴电话面试试题.doc

    ArrayList 和 LinkedList 都是 Java 集合框架中的一种数组实现,但它们有着明显的区别: 1. 内部数据结构:ArrayList 的内部元素容器是一个 Object 的数组,而 LinkedList 的内部实际上是一个链表的数据结构。 2. ...

    NET面试题库,含答案

    2. 数组到ArrayList 的复制:可以使用 foreach 语句来实现数组到ArrayList 的复制。 3. 反射和序列化:反射提供了封装程序集、模块和类型的对象,可以动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中...

    java面试题.rar

    - **数组和ArrayList的区别**:数组固定大小,ArrayList动态增长,操作数组更高效但ArrayList提供了更多的方法。 - **栈和队列**:栈的后进先出(LIFO),队列的先进先出(FIFO)。 - **HashMap和HashSet**:...

    BATjava面试含答案

    1. List 是有序的,ArrayList 和 LinkedList 是最常用的两种 List 实现,前者使用数组结构,后者使用链表结构。 2. ArrayList 和 LinkedList 的使用场景不同,ArrayList 适合查询较多的场合,LinkedList 适合插入较...

Global site tag (gtag.js) - Google Analytics