关于教辅资料中LinkedList的使用

关于教辅资料中LinkedList的使用

这个LinkedList是有两种存储方式吗?一种是基于链表,一种是基于队列?那怎么知道是用哪种数据结构存储数据呢?是根据所调用的增删改查方法判断,还是他们就是混在一起操作的呢?比如我调用add方法和push方法的添加是一个意思么。 还有一个问题是pop方法和poll方法,pop是弹出队列最后加入的元素,相当于删除。而poll也是获取队列最后加入元素,并且从队列中删除。他们作用不是一样了么,都是删除且获取。求解~

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,

1、老师我明白这两个不同接口肯定是通过不同的方法进行不同数据类型的存储,我的问题是,教辅资料中并不是父类接口引用指向子类对象的方式创建对象,而是LinkedList引用指向本身LinkedList对象。它列举了两个例子,一个用add()方法存储到链表,另一个例子用push()方法存储到队列。那我在存储我需要处理的这一堆数据时这次用add,下次用push,混合使用会不会出错?还是可以正常操作,只是增删改查的方式不同而已,操作的还是同一个list集合容器吗?

混合使用并不会出错的,是可以正常操作的,但是不建议这样使用,因为这样编译一是不符合开发规范,还有就是使代码读起来不清晰。对同一个集合进行add或者push,则操作的还是同一个集合。

如:

import java.util.LinkedList;

public class LinkedListTest {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<String>();
		list.push("banana");
		list.add("apple");
		for(String l:list) {
			System.out.println(l);
		}
		
	}

}

输出结果:

http://img1.sycdn.imooc.com/climg/5dd7a80409b8436002430133.jpg

2、既然poll方法和pop方法功能都是删除且获取,为什么不只存在poll这种比较安全的方法呢?亦或者pop方法在某些情况效率比poll方法高?

因为他们底层本质使用的数据结构是不同的,poll是通过队列数据结构,而pop是通过栈的数据结构实现的,而Java中对栈描述的类已经过时了,所以栈相关方法包括在了接口Deque中。

而队列(Queue):是限定只能在表的一端进行插入和另一端删除操作的线性表
栈(Stack):是限定之能在表的一端进行插入和删除操作的线性表

同学这部分了解就可以,不需要深究哦!

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • qq_粽翎_0 提问者 #1
    好的感谢老师解答,不过我还是想知道到底是poll好还是pop好一点【笑哭】
    2019-11-22 17:54:46
  • 好帮手慕酷酷 回复 提问者 qq_粽翎_0 #2
    同学你好,使用两种方式都是可以的,使用时没有太大的区别,具体可以按照实际项目的需求而定就可以的,如果不想出现进行抛出异常等问题,就可以使用poll(),否则则使用pop就可以啦!如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-11-22 18:02:43
  • qq_粽翎_0 提问者 回复 好帮手慕酷酷 #3
    非常感谢!
    2019-11-22 18:04:50
好帮手慕酷酷 2019-11-22 14:40:41

同学你好,

1、这个LinkedList是有两种存储方式吗?一种是基于链表,一种是基于队列?

是的,因为LinkedList 本身是基于链表实现的,但是又实现了 Deque接口,也就是表示支持队列的数据结构进行存储。

如:

http://img1.sycdn.imooc.com//climg/5dd77d3c098d320507920135.jpg

Deque接口继承了Queue接口。

http://img1.sycdn.imooc.com//climg/5dd77eb009e7e71307410079.jpg

2、那怎么知道是用哪种数据结构存储数据呢?是根据所调用的增删改查方法判断,还是他们就是混在一起操作的呢?比如我调用add方法和push方法的添加是一个意思么。

这里并不是混合操作的,这里通过Deque接口实现的方法,就是通过队列的方式进行存储的,如:添加操作中的push。

而通过List接口实现的方法,就是通过链表的方式进行存储的,如add()方法。

3、pop方法和poll方法,pop是弹出队列最后加入的元素,相当于删除。而poll也是获取队列最后加入元素,并且从队列中删除。他们作用不是一样了么,都是删除且获取。

不同点在于当队列为空时,调用pop()会抛出异常,而poll()会返回null,不会抛出异常

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 qq_粽翎_0 #1
    感谢老师解答,还有疑问: 2.老师我明白这两个不同接口肯定是通过不同的方法进行不同数据类型的存储,我的问题是,教辅资料中并不是父类接口引用指向子类对象的方式创建对象,而是LinkedList引用指向本身LinkedList对象。它列举了两个例子,一个用add()方法存储到链表,另一个例子用push()方法存储到队列。那我在存储我需要处理的这一堆数据时这次用add,下次用push,混合使用会不会出错?还是可以正常操作,只是增删改查的方式不同而已,操作的还是同一个list集合容器吗? 3.既然poll方法和pop方法功能都是删除且获取,为什么不只存在poll这种比较安全的方法呢?亦或者pop方法在某些情况效率比poll方法高?继续求解~
    2019-11-22 15:49:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师