一、先来看看ArrayList与LinkedList 在JDK中所在的位置
从图中可以看出,ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同,(编程思想: 从中可以看出面向接口的好处, 对于不同的需求就有不同的实现!),而List接口继承了Collection接口,Collection接口又继承了Iterable接口,因此可以看出List同时拥有了Collection与Iterable接口的特性.
二、认识和理解ArrayList
ArrayList实现了List接口,它是以数组的方式来实现的,数组的特性是可以使用索引的方式来快速定位对象的位置,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好.
ArrayListDemo:
public class ArrayListDemo {
public static void main(String[] args) {
List<String> userlist = new ArrayList<String>();
userlist.add("yulon");
userlist.add("xiaoyun");
userlist.add("羽龙共舞");
System.out.println("使用普通for循环:");
for(int i=0; i<userlist.size(); i++){
System.out.print(userlist.get(i)+" ");
}
System.out.println();
System.out.println();
System.out.println("使用Iterator迭代器:");
Iterator it = userlist.iterator();
while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.println();
System.out.println();
System.out.println("使用增强for循环:");
for(String s : userlist){
System.out.print(s+" ");
}
}
}
这里列举出了循环List列表的三种方式: 使用普通for循环,用get方法获取; 使用Iterator迭代器,使用next方法遍历;使用增强for循环,直接输出! 由此可见第三种方法是最方便,最简洁的!
三、认识和理解LinkedList
LinkedList是采用链表的方式来实现List接口的,它本身有自己特定的方法,如: addFirst(),addLast(),getFirst(),removeFirst()等. 由于是采用链表实现的,因此在进行insert和remove动作时在效率上要比ArrayList要好得多!适合用来实现Stack(堆栈)与Queue(队列),前者先进后出,后者是先进先出.
1、堆栈
public class StringStack {
private LinkedList<String> linkedList
= new LinkedList<String>();
/**
* 将元素加入LinkedList容器
* (即插入到链表的第一个位置)
*/
public void push(String name){
linkedList.addFirst(name);
}
/**
* 取出堆栈中最上面的元素
* (即取出链表linkedList的第一个元素)
* @return
*/
public String getTop(){
return linkedList.getFirst();
}
/**
* 取出并删除最上面的元素
* (即移出linkedList的第一个元素)
* @return
*/
public String pop(){
return linkedList.removeFirst();
}
/**
* 获取元素个数
* @return
*/
public int size(){
return linkedList.size();
}
/**
* 判断堆栈是否为空
* (即判断 linkedList是否为空)
* @return
*/
public boolean isEmpty(){
return linkedList.isEmpty();
}
//测试
public static void main(String[] args) {
StringStack stack = new StringStack();
stack.push("yulon");
stack.push("xiaoyun");
stack.push("羽龙共舞");
System.out.print("第一个元素是:\t");
System.out.println(stack.getTop());
System.out.println();
System.out.println("全部元素:");
while(!stack.isEmpty()){
System.out.println("\t"+stack.pop());
}
}
}
输出结果是:
第一个元素是: 羽龙共舞
全部元素:
羽龙共舞
xiaoyun
yulon
知识提示: LinkedList的特有方法(本身定义的方法)如:addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()等
2、实现队列类似,在此不再举例
3、如果要使用队列的功能,由于LinkedList也实现了java.util.Queue接口,所以可以直接使用LinkedList的实例来实现.
public class QueueDemo {
public static void main(String[] args) {
//父类引用queue指向子类对象
Queue<String> queue = new LinkedList<String>();
//offer()方法是往队列加入元素
queue.offer("xiaoyun");
queue.offer("yulon");
queue.offer("羽龙共舞");
String element = null;
while((element=queue.poll())!=null){
System.out.println(element+"\t");
}
}
}
输出顺序是:
xiaoyun
yulon
羽龙共舞
四、在删除可插入对象的动作时,为什么ArrayList的效率会比较低呢?
解析: 因为ArrayList是使用数组实现的,若要从数组中删除或插入某一个对象,需要移动后段的数组元素,从而会重新调整索引顺序,调整索引顺序会消耗一定的时间,所以速度上就会比LinkedList要慢许多. 相反,LinkedList是使用链表实现的,若要从链表中删除或插入某一个对象,只需要改变前后对象的引用即可!
- 大小: 6.2 KB
分享到:
相关推荐
总的来说,理解ArrayList和LinkedList的基本特性和应用场景,以及如何处理与之相关的安全性问题,是Java程序员必备的知识。通过深入学习和实践,可以更好地利用这些数据结构提升程序效率和质量。
本文将深入探讨ArrayList、Vector和LinkedList三种集合类的特点与使用场景,帮助开发者更好地理解它们之间的差异。 #### 一、ArrayList与Vector **1. 存储方式** - **ArrayList** 和 **Vector** 都采用动态数组的...
总之,理解ArrayList、LinkedList和Vector的内部工作原理和性能特征,可以帮助我们做出更明智的选择,优化代码性能,并避免不必要的资源消耗。在深入源码阅读和实践过程中,我们可以更深入地理解这些类的设计思想和...
《ArrayList与LinkedList源码解析》 在Java编程中,ArrayList和LinkedList是两种常见的动态数组,它们都是Java集合框架的一部分,提供了对元素存储和操作的功能。本篇将深入探讨ArrayList和LinkedList的内部实现...
总结来说,深入理解ArrayList、LinkedList、HashMap和HashSet的源码,有助于我们更好地利用它们的特性,优化代码性能,并在面临并发问题时做出正确的选择。对于开发人员来说,掌握这些基础数据结构的实现原理是提高...
本篇文章将深入探讨`List`集合的各种操作,包括增、删、改、查,以及`ArrayList`和`LinkedList`两种实现`List`接口的类之间的区别。同时,我们还将讨论如何利用`LinkedList`实现堆栈和队列的功能,并了解`List`集合...
今天,我们将深入了解 Java 中的集合类别,包括 ArrayList、Vector、LinkedList 和 Map 等。 ArrayList ArrayList 是一种基于数组的集合类别,它可以存储大量的数据。ArrayList 的特点是:它可以动态地增加或减少...
此外,深入理解Java集合框架还包括对整个框架设计的理解,如接口层次结构、实现类的内部机制以及不同容器(集合和Map)的性能特征。在并发领域,需要了解不同容器在多线程环境下的表现,如ConcurrentHashMap相对于...
了解它们的源码对于深入理解Java集合框架的内部工作原理至关重要,尤其是对初学者而言,这有助于提高编程技能和优化代码性能。 **Map接口** Map是Java集合框架中的一个接口,它定义了键值对存储的方法。Map接口不...
### ArrayList与LinkedList的特点详解 #### 一、ArrayList的特点 **1.... - **基于数组实现**:`...通过对这两种数据结构特点的深入理解,可以帮助开发者更好地选择适合特定场景的集合类型,从而提高程序的性能和效率。
本文将深入探讨ArrayList和LinkedList的内部实现、性能差异以及如何在实际应用中进行操作。 首先,ArrayList是一个动态数组,它在内存中开辟一段连续的空间来存储元素。它的优点在于随机访问速度快,因为数组可以...
总结来说,理解并熟练掌握`ArrayList`、`LinkedList`、`Vector`和`Map`各自的特性,能够帮助我们根据具体的应用场景选择最适合的数据结构,从而优化代码性能和效率。在实际编程中,灵活运用这些集合类可以极大地提高...
杂谈基本数据结构–线性表: ... ArrayList和LinkedList是顺序存储结构和链式存储结构的表在java语言中的实现. ArrayList提供了一种可增长数组的实现,使用ArrayList,因为内部使用数组实现,所以,它
本篇将深入探讨`ArrayList`和`LinkedList`的基本概念、工作原理以及性能对比。 首先,`ArrayList`是一个基于数组实现的动态列表。它内部维护了一个Object类型的数组,可以存储任何类型的数据。由于数组的特性,`...
在Java编程语言中,ArrayList、Vector和LinkedList是三种常见的动态数组实现,它们都属于集合框架中的List接口。这里我们将深入探讨这三种数据结构的源码,理解它们的内部实现、性能特性和适用场景。 首先,...
该项目中,可能包含了这两个数据结构的实现源码,通过阅读和分析源码,可以深入理解ArrayList和LinkedList的工作机制,这对于提升编程技巧和解决问题的能力大有裨益。此外,源码分析也是Java面试中常见的题目,因此...
1. **集合框架理解**:深入理解Java集合框架,包括List接口、Set接口和Map接口,以及它们的实现类如ArrayList、LinkedList、HashSet、HashMap等。 2. **ArrayList与LinkedList的区别**:对比分析ArrayList和...
ArrayList和LinkedList是Java集合框架中的两种重要数据结构,它们都实现了List接口,但各自有其独特的特性和使用场景。在本教程中,我们将深入探讨这两种数据结构的实现,并结合Eclipse IDE进行实践。 首先,...
在这个主题中,我们将深入探讨如何在JNI中操作ArrayList对象并添加一个int类型的数据。 首先,我们需要理解ArrayList在Java中的本质。ArrayList是Java集合框架中的一个重要类,它实现了List接口,用于存储可变大小...