Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

时间:2022-05-30 17:52:46

一. 练习

对于面试常出现的问题进行介绍。

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

这里有两个数据结构,对两者进行一个介绍。

队列像管子,从左端开始进入,随着后面的进入,先进入的被挤到右端,直到先从右端挤出。

为了符合项目中的需求,现在准备做这两个机构,完成我们的实际需求。

有人说,采用前一节讲述的removeFisrt,不是这样来操作的,需求是指让你做个具备特定功能的容器出来,而不是自己书写一下这样的操作。

我们应该描述这样一个容器,给使用者提供一个容器对象来完成这两种结构中的一种。

二.

现在描述一下队列,先编写一个类来描述一下。队列容器有一个特点,能完成先进先出的的操作,调用玩添加方法,调用取的方法时,怎么存进去就怎么取出来。

当我们自己做容器比较困难的话,可以依赖于现有的容器。

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

截图中有两点需要注意:这个类的功能不是继承来的,而是通过类中定义一个特定类型的对象,接着将特定类型对象的方法提取出来作为自己创建对象的方法。

注意:这种在内部创造特定类型对象,而不是继承特定对象的方法,可以使得自己创建的对象,具备特定的功能,而没有其它功能,看着比较简洁。

添加和取出的方法,有first和last的标注,两者不同就是队列,相同(addLast和removeLast)就是堆栈。

最后要判断容器中有没有元素。存和取挺容易知道,但是这个判断也是必须的么?

本例中,创建的类将LinkList的方法全部封装起来的了,封装完后,就看不到LinkList了,看到的只能是我们自己创建的类。

其实这么写不太合适,应该提供一个工具类。

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

应该提供一个工具类,叫做队列这么一个类,把定义的内容都拿到这个类里面,因为这样是单独的一个对象。同时,DuiLie()前面还要带上public,这要暴露出去方便使用。

有了定义好的工具类,之前的例子可以换一种写法。

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

后期1.6版本又提供了一些新的方法,在LinkList链表结构当中。如下图所示。

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

这些方法和现有方法的功能是相同的,但是有些区别,升级是有原因的。

区别需要知道,开发的时候明确用哪个方法。

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

getFirst方法有个特点,如果链表里面什么也没有,调用该方法的话,是没有东西的。它会抛出异常,这个异常叫做没有这个元素异常。

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

对于它的替代方法peak来讲,没有元素的话,返回null。空意味着我可以做判断,

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

Java-初步认识-常用对象API(集合框架-LinkedList集合-练习栈堆和队列)

LinkList相对ArrayList要少用一些,因为我们更多是以查询动作为主。

package collectionsDemo;
/*使用LinkedList来模拟一个堆栈或者队列数据结构
 * 
 * 堆栈:先进后出
 * 
 * 队列:先进先出
 * 
 * 我们应该描述一个容器,给使用提供一个容器对象完成这两种结构的一种。
 */

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedTest {

	public static void main(String[] args) {
		DuiLie d1 = new DuiLie();
		d1.myAdd("abc1");
		d1.myAdd("abc2");
		d1.myAdd("abc3");
		d1.myAdd("abc4");
		
		while (!d1.isNull()) {
			System.out.println(d1.myGet());
		}
		
	}

}
package collectionsDemo;

import java.util.LinkedList;

class DuiLie {

			private LinkedList link;
			
			DuiLie() {
				link = new LinkedList();
			}
			/**
			 * 队列的添加元素功能
			 */
			
			public void myAdd(Object obj) {
				link.addLast(obj);
			}
			//获取
			public Object myGet() {
				return link.removeFirst();
//				return link.removeLast();
			}
			//是否为空
			public boolean isNull() {
				return link.isEmpty();
			}
			
 }