从概念上可知,数组属于线性表(逻辑上一一对应关系),数组在物理内存上采用顺序存储结构。当创建一个数组的时候,就必须确定它的大小,系统会在内存中开辟一块连续的空间,用来保存数组。
优点:可根据索引快速的查找元素。
缺点:大小不可变。(确切应该讲,不能往一个放满元素的数组里再添加新的元素)
ArrayList正是保留了数组可以快速查找的优势,同时,又弥补了数组在创建后,要往数组添加元素的弊端。
其实,要往一个已经放满元素的数组里面再添加一个元素,也是可以实现的,即创建一个比原数组容量大一的新数组,将数组中的元素“搬”到新数组,再将新的元素也放入新数组,最后将新数组赋给原数组即可。(这也是用数组的方式实现ArrayList的基本方法)
int[] oldArray = {1,2,3,4};
int[] newArray = new int[oldArray.length+1];
for(int t =0;t<oldArray.length;t++){
newArray[t] = oldArray[t];
}/*这里不能直接用newArray=oldArray; 因为这样newArray的大小会变成 跟oldArray一样了。 */
System.out.println(newArray.length);
newArray[oldArray.length] = 5;
oldArray = newArray;
通过这样的方法,我们可以简单的实现自己的ArrayList。
public class MyArrayList {
private static Object array[] = new Object[0];
//得到队列的大小
public int getLength(){
return array.length;
}
//根据索引得到元素
public Object get(int index){
return array[index];
}
public void add(Object obj){
Object o[] = new Object[(array.length+1)];
for(int t=0;t<array.length;t++){
o[t]=array[t];
}
o[array.length] = obj;
array = o;
}
public void add(int index, Object obj){
Object o[] = new Object[(array.length+1)];
for(int t=0;t<index;t++){
o[t]=array[t];
}
o[index] = obj;
for(int t=index+1;t<o.length;t++){
o[t]=array[t-1];
}
array = o;
}
/**
* 查找队列中是否存在obj元素
* @param obj:要查找的元素对象
* @return :返回元素第一次出现的索引位置,若不含该元素则返回-1
*/
public int indexOf(Object obj){
for(int t=0;t<array.length;t++){
if(array[t].equals(obj)){
return t;
}
}
return -1;
}
}
以上便是自己用数组实现的简单的ArrayList。
这样子,我们不但保留了数组可以根据索引快速查找的优势,同时,还可以随时往里面添加元素,不过添加元素的效率应该还是没有链表的效率高的,因为需要创建一个新的数组,还要进行“搬迁”的工作,实在麻烦。
=============================================
下面请教一下大家怎么称呼ArrayList的?
一开始学Java的时候,就一直把ArrayList称之为“队列”(也不知道对不对)。
ArrayList,以其称之为队列,倒不如叫做“可增长的数组”好了(个人看法)。
现在反倒觉得不恰当了,因为ArrayList根本也没继承队列Queue接口。而且,list在百度词典上有着“链表,表”的含义,完全没有“队列”这个意思。
同时,根据百度百科的定义:“队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。”ArrayList跟队列实在是风马牛不相干呀。
另外,LinkedList则是同时继承了Queue接口跟List接口。
PS:这篇文档,我反复的更改字体格式,甚至拷到Word中更改完再复制回来,但始终就是发表后,跟我预览的完全不一样...不知道是不是我电脑有问题,还是人品有问题。如造成您的阅读困扰,请谅解!!!
分享到:
相关推荐
《Java数据结构与算法中文版》是一本深入探讨编程核心领域的书籍,主要针对Java程序员,旨在提升他们在数据处理和问题解决能力上的技能。这本书详细介绍了数据结构和算法的基础理论及其在Java语言中的实现,是Java...
数据结构与算法是计算机科学的基础,对于理解和编写高效软件至关重要。C、C++和Java都是广泛使用的编程语言,它们在处理数据结构和算法时各有特点。以下是对这三种语言在数据结构与算法方面的一些关键知识点的详细...
《Java数据结构和算法中文第二版》是一本深入探讨Java编程中数据结构和算法的书籍。数据结构是计算机科学的基础,它涉及到如何有效地组织和存储数据,以便在各种操作下高效地访问和修改。算法则是解决问题的具体步骤...
《Java数据结构和算法中文第二版》和《数据结构与算法分析——Java语言描述》是深入学习的宝贵资料,它们将帮助读者深入理解数据结构的原理和算法的实现,提高编程技能。 通过系统学习这些内容,开发者可以更好地...
在编程领域,数据结构与算法是核心基础,对于任何编程语言,包括Java,理解并熟练掌握它们至关重要。本文将深入探讨Java中的数据结构与算法,旨在帮助开发者提升问题解决能力和程序设计技巧。 首先,我们来看数据...
总的来说,Java数组是学习数据结构和算法的基础,理解其工作原理和相关操作对于提高编程能力至关重要。通过深入学习数组,你可以更好地应对各种编程挑战,为更复杂的数据结构和算法打下坚实的基础。在实际开发中,...
3. **异常处理**:JAVA提供了一种结构化的异常处理机制,学习笔记会解释何时及如何使用try-catch-finally语句块,以及不同类型的异常类。 4. **内存管理与垃圾回收**:JAVA的自动内存管理是通过垃圾回收机制实现的...
总结来说,这份“Java数据结构与算法+源代码高清版”资源涵盖了IT领域的基础核心知识,它可以帮助学习者或开发者从理论到实践全面掌握数据结构和算法,提升编程能力,为解决复杂问题打下坚实的基础。通过深入学习和...
本资料集是基于Java语言的实现,由著名计算机科学家Mark Allen Weiss所著的《数据结构与问题求解——java语言描述》(第三版)的源码。该书通过丰富的实例和深入的理论讲解,帮助读者理解和掌握各种经典的数据结构...
在.NET框架中,ArrayList是System.Collections命名空间下的一种动态数组,它可以存储任意类型的对象,而ListBox控件则是Windows Forms应用程序中常见的用户界面元素,用于显示一个可选项目的列表。本篇将详细介绍...
在C#编程语言中,数组和ArrayList是两种不同的数据结构,它们各自有着特定的用途和特点。本篇文章将深入探讨这两种数据结构,以及它们在实际编程中的应用与区别。 首先,数组是C#中最基本的数据结构之一,它是一种...
在编程领域,Java数据结构与算法分析是提升编程能力、优化程序效率的关键所在。本资料集专注于Java语言,深入探讨了各种数据结构和算法,旨在帮助Java开发者更好地理解和运用这些核心概念。 首先,数据结构是存储和...
在编程领域,尤其是在C#语言中,数组和ArrayList是两种常用的数据存储结构。...在实际编程中,我们应根据需求选择最合适的解决方案,同时,随着技术的发展,不断学习新的数据结构和算法,以适应不断变化的编程环境。
在Java中,学习数据结构与算法不仅可以深化对语言特性的理解,还能为实际开发提供强大的工具。例如,集合框架(java.util包)中就包含了多种数据结构的实现,如ArrayList、LinkedList、HashMap等,这些都是数据结构...
本资源"JAVA数据结构与算法(中英全)"提供了一套完整的Java数据结构和算法的学习资料,包括中文和英文两个版本,方便不同语言背景的学习者使用。 首先,我们来探讨数据结构这一部分。数据结构是组织、管理、存储和...
本资料集是“数据结构与算法答案——java语言描述”,虽然全为英文内容,但其深入探讨了使用Java实现数据结构和算法的细节。 1. **数组**:数组是最基本的数据结构之一,它是一系列相同类型元素的集合,可以通过索...
本文将基于《Java数据结构和算法》学习笔记中的“栈和队列”部分进行深入探讨。 栈(Stack)是一种线性数据结构,遵循后进先出(LIFO, Last In First Out)的原则。在栈中,元素的添加(压栈)和移除(弹栈)都是在...
总的来说,“数据结构与算法 Java版”涵盖了如何在Java环境中理解和实现各种数据结构及算法的知识,这对于Java程序员的技能提升和问题解决能力的培养至关重要。通过深入学习,不仅可以提高编程技巧,还能为解决复杂...
《数据结构与算法分析》是计算机科学领域的一本经典著作,尤其在Java版本中,它深入探讨了如何在Java编程语言中实现各种数据结构和算法。这本书不仅提供了理论知识,还通过提供源代码实例,帮助读者更好地理解和应用...
《Java数据结构与算法》是一本深入探讨编程基础与进阶技术的书籍,其中的"applet"部分涉及了Java编程中的一个重要概念——Java小应用程序。Applet是Java语言在Web环境中的一种应用形式,它可以在浏览器中运行,为...