从概念上可知,数组属于线性表(逻辑上一一对应关系),数组在物理内存上采用顺序存储结构。当创建一个数组的时候,就必须确定它的大小,系统会在内存中开辟一块连续的空间,用来保存数组。
优点:可根据索引快速的查找元素。
缺点:大小不可变。(确切应该讲,不能往一个放满元素的数组里再添加新的元素)
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中更改完再复制回来,但始终就是发表后,跟我预览的完全不一样...不知道是不是我电脑有问题,还是人品有问题。如造成您的阅读困扰,请谅解!!!
分享到:
相关推荐
数据结构与算法是计算机科学的基础,对于理解和编写高效软件至关重要。C、C++和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#中最基本的数据结构之一,它是一种...
在编程领域,尤其是在C#语言中,数组和ArrayList是两种常用的数据存储结构。...在实际编程中,我们应根据需求选择最合适的解决方案,同时,随着技术的发展,不断学习新的数据结构和算法,以适应不断变化的编程环境。
本资料集是“数据结构与算法答案——java语言描述”,虽然全为英文内容,但其深入探讨了使用Java实现数据结构和算法的细节。 1. **数组**:数组是最基本的数据结构之一,它是一系列相同类型元素的集合,可以通过索...
本文将基于《Java数据结构和算法》学习笔记中的“栈和队列”部分进行深入探讨。 栈(Stack)是一种线性数据结构,遵循后进先出(LIFO, Last In First Out)的原则。在栈中,元素的添加(压栈)和移除(弹栈)都是在...
在Java语言中,学习数据结构与算法可以提升编程效率,优化程序性能,为成为专业软件开发者奠定坚实基础。本资源包含两部分:一本名为“数据结构与算法(JAVA语言版)”的PDF教程和一个“源码.zip”压缩包,提供了...
《Java数据结构与算法(第二版)》是一本深度探讨Java编程中数据结构和算法的专著,包含源码分析,旨在帮助读者深入理解并掌握这些核心概念。数据结构是计算机存储、组织数据的方式,而算法则是解决问题或执行任务的...
在IT领域,尤其是在Java编程中,数据结构和算法是核心基础,它们对于开发高效、优化的...总之,Java数据结构和算法是开发者必备的技能,通过不断学习和练习,可以提升编程效率和代码质量,为职业发展打下坚实的基础。
数据结构与算法(C#).PDF及代码 第1章 Collections类、泛型类和Timing类概述 第2章 数组和ArrayList 第3章 基础排序算法 第4章 基础查找算法 第5章 栈和队列 第6章 BitArray类 第7章 字符串、String类和StringBuioder...
数据结构与算法分析是计算机...通过阅读《数据结构与算法分析Java3rd英文》这本书,你可以深入理解这些概念,并学习如何在Java中有效地应用它们。这本书会涵盖各种示例和练习,帮助读者巩固理论知识并提高实践技能。
在Java面试中,数据结构与算法是至关重要的考察点,它们是解决问题的基础工具,能够有效提升程序的效率和可维护性。以下将详细介绍标题和描述中提到的一些关键知识点。 1. **数组**:数组是最基本的数据结构,它在...
《Java数据结构和算法中文第二版》是一本深入探讨Java编程中数据结构和算法的专著,适合希望提升自己在编程领域尤其是Java平台上的算法理解与应用能力的读者。本书全面覆盖了各种基础和进阶的数据结构以及算法,旨在...
总的来说,这个资源集合为Java开发者提供了一个全面学习数据结构和算法的平台,不仅可以理论学习,还可以动手实践,对于提升编程能力和解决问题的能力大有裨益。无论是初学者还是经验丰富的开发者,都可以从中受益。
Java数据结构与算法是计算机科学中的基础且至关重要的部分,它们是解决问题和设计高效程序的核心。本书《Java数据结构与算法(第二版)》显然深入探讨了这些主题,旨在帮助读者提升编程技能和理解复杂问题的解决策略...