JavaSE02_Day03(上)-队列(单向、双向)、栈、Maven(定义、优点、配置、创建项目、下载jar包)

一、队列和栈

  程序 = 算法 + 数据结构,数据结构可以在工作半年以后进行研究,当前课程中给同学们讲的内容先可以作为了解项。数据结构以后可以购买《大话西游之数据结构》

1.1 单向队列Queue

  队列继承自Collection接口:public interface Queue<E> extends Collection<E> ,队列遵循“先进先出”原则(FIFO:First Input First Output)。队列用Queue表示,并且它也是一个容器,可以用来进行存储一组数据。

 package cn.tedu.collection_three;
 
 import java.util.LinkedList;
 import java.util.Queue;
 
 /**
  * 队列是非常经典的数据结构之一,用Queue表示,
  * 使用队列可以进行存储一组数据,队列的超类是
  * Collection接口,并且也支持在存储元素的过程中
  * 指定存储元素的类型,遵循的原则:FIFO
  * @author cjn
  *
  */
 public class QueueDemo {
 
     public static void main(String[] args) {
         //1.创建队列对象
         Queue<String> queue = new LinkedList<String>();
         
         /*
          * 2.向队列中添加元素内容(入队)
          * boolean offer(E e)
          */
         queue.offer("星期一");
         queue.offer("星期二");
         queue.offer("星期三");
         queue.offer("星期四");
         queue.offer("星期五");
         System.out.println("队列对象为:" + queue);
         
         /*
          * 3.出队
          * E poll()
          */
         String str = queue.poll();
         System.out.println("出队的元素为:" + str);
         System.out.println("查看当前队列对象为:" + queue);
         
         /*
          * 4.查看队列中的首元素,但是元素不离队
          * E peek()
          */
         str = queue.peek();
         System.out.println("查看队列中的首元素为:" + str);
         System.out.println("查看当前队列对象为:" + queue);
         
         /*
          * 5.遍历队列中的元素内容,但是不会让元素离队
          * 使用foreach新循环的方案进行遍历,
          * 底层执行的时候,在编译期会转换为迭代器遍历
          */
         for (String str1 : queue) {
             System.out.print(str1 + "   ");    
        }
         System.out.println();
         
         /*
          * 6.查看队列中元素的个数
          * int size()
          */
         int num = queue.size();
         System.out.println("队列中元素的个数为:" + num);
         
         /*
          * 7.让队列中的所有元素出队
          * 之所以要加while判断,是因为在出队的过程中,size始终在变,不能直接使用
          */
         while (queue.size() > 0) {
             String str2 = queue.poll();
             System.out.println(str2);
        }
         System.out.println("当前队列对象:" + queue);//[]    
    }
 
 }

测试结果:

 队列对象为:[星期一, 星期二, 星期三, 星期四, 星期五]
 出队的元素为:星期一
 查看当前队列对象为:[星期二, 星期三, 星期四, 星期五]
 查看队列中的首元素为:星期二
 查看当前队列对象为:[星期二, 星期三, 星期四, 星期五]
 星期二   星期三   星期四   星期五  
 队列中元素的个数为:4
 星期二
 星期三
 星期四
 星期五
 当前队列对象:[]

注意

  • 问题:为什么不用add而用offer?

  • 答案:add方法在不违反队列的容量限制的情况下,往队列中添加一个元素,如果添加成功则返回true。如果因为容量限制添加失败了,则抛出IllegalStateException异常,在有容量限制的队列中,最好使用offer方法。另外,add方法相对于offer方法而言,有一个专门抛出的异常IllegalStateException,代表由于容量限制导致不能添加元素的异常,接口中可能看不出,等到具体实现就明白了。

1.2 双向队列Deque

  双向队列用Deque表示,也是一个接口,继承自Queue:public interface Deque<E> extends Queue<E> ,双向队列是可以首尾两端进行进出的容器。无论是单向队列还是双向队列,常用的实现类LinkedList。

 package cn.tedu.collection_three;
 
 import java.util.Deque;
 import java.util.LinkedList;
 
 /**
  * 双向队列案例演示
  * Deque是可以首尾两个方向进行进出元素的数据结构
  * @author cjn
  *
  */
 public class DequeDemo {
 
     public static void main(String[] args) {
         //1.创建双向队列对象
         Deque<String> deque = new LinkedList<String>();
         
         //2.向队列中添加元素内容:boolean offer(E e);
         deque.offer("星期一");
         deque.offer("星期二");
         deque.offer("星期三");
         deque.offer("星期四");
         deque.offer("星期五");
         System.out.println("双向队列对象:" + deque);
         
         //3.从队首进行入队:boolean offerFirst(E e);
         deque.offerFirst("星期日");
         System.out.println("双向队列对象:" + deque);
         
         //4.从队尾进行入队:boolean offerLast(E e);同offer一样
         deque.offerLast("星期六");
         System.out.println("双向队列对象:" + deque);
         
         //5.从队首进行出队:E pollFirst();同poll一样
         deque.pollFirst();
         System.out.println("双向队列对象:" + deque);
         
         //6.从队尾进行出队:E pollLast();
         deque.pollLast();
         System.out.println("双向队列对象:" + deque);
         
         //7.查看队首元素(不离队):E peekLast();同peek一样
         String str = deque.peekFirst();
         System.out.println("查看队首元素:" + str);
         System.out.println("双向队列对象:" + deque);
         
         //8.查看队尾元素(不离队):E peekLast();
         str = deque.peekLast();
         System.out.println("查看队尾元素:" + str);
         System.out.println("双向队列对象:" + deque);    
    }
 
 }

测试结果:

 双向队列对象:[星期一, 星期二, 星期三, 星期四, 星期五]
 双向队列对象:[星期日, 星期一, 星期二, 星期三, 星期四, 星期五]
 双向队列对象:[星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
 双向队列对象:[星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
 双向队列对象:[星期一, 星期二, 星期三, 星期四, 星期五]
 查看队首元素:星期一
 双向队列对象:[星期一, 星期二, 星期三, 星期四, 星期五]
 查看队尾元素:星期五
 双向队列对象:[星期一, 星期二, 星期三, 星期四, 星期五]

1.3 栈

  栈并不是指第一阶段学习对象内存管理时的栈,当前所学习的栈也是数据结构其中之一,可以使用栈进行存储一组元素,使用栈进行对元素存取时需要遵守“先进后出(FILO)”的原则,通常使用栈可以进行实现"后退的功能"。(类似于子弹上膛,先上的最后发射)

 package cn.tedu.collection_three;
 
 import java.util.Deque;
 import java.util.LinkedList;
 
 /**
  * 数据结构之一:栈案例演示
  * Deque除了可以实现双向队列以外,
  * 也可以用它实现栈,栈相关的演示
  * 需要调用不同的API方法
  * @author cjn
  *
  */
 public class StackDemo {
 
     public static void main(String[] args) {
         //1.创建栈对象
         Deque<String> deque = new LinkedList<String>();
         
         /*
          * 2.向栈中添加元素内容(入栈)
          * void push(E e)
          */
         deque.push("星期一");
         deque.push("星期二");
         deque.push("星期三");
         deque.push("星期四");
         deque.push("星期五");
         System.out.println("查看栈对象:" + deque);
         
         /*
          * 3.出栈
          * E pop()
          */
         String str = deque.pop();
         System.out.println("出栈对象为:" + str);
         System.out.println("查看栈对象:" + deque);
    }
 
 }

测试结果:

 查看栈对象:[星期五, 星期四, 星期三, 星期二, 星期一]
 出栈对象为:星期五
 查看栈对象:[星期四, 星期三, 星期二, 星期一]

二、Maven

2.1 定义:

  Maven中文意思是"内行"、"专家"的含义,是Apache公司提供的使用Java语言进行开发的项目产品。使用Maven可以进行对项目的构建、报告、文档等步骤操作。

2.2 优点:

  • 是行业内的规范,几乎所有的公司在进行开发项目时都会使用Maven;

  • 可以使用Maven帮助程序员下载项目中需要使用到的jar包依赖;

  • 在第四阶段使用:创建聚合项目(创建父级项目进行管理多个子级模块项目)

2.3 使用Maven

  从苍老师的网站中下载阿里云镜像的压缩包,然后解压到本地,解压以后是一个settings.xml文件,需要将这个文件放到当前存储Java代码的工作空间中。并不是非得放到这个工作空间中,放到其他的文件夹目录也可以,只要是大家可以找到的位置均可。

2.4 Maven的配置

(1)Eclipse工具做关联配置

  window--->Perferences

 

  Maven--->User Settings--->将下载好的阿里云或华为的maven:settings.xml文件复制到该工作空间下,选择该文件进行关联--->Update Settings

  配置完成后,软件自动进行maven配置下载和更新,接下来需要检查maven是否安装成功。

  Window--->Show View---Others...

  输入maven,查看是否能加载相关组件,可以加载说明安装成功。

(2)IDEA工具做关联配置

  保证前三点的操作之后再进行操作

以后工作中使用Maven下载及其配置参考:

1、 windows:https://www.jianshu.com/p/ad49d3d04800

2、mac:https://www.jianshu.com/p/6431a600b544

2.5 创建第一个Maven项目

  左侧空白处单击右键或File-->New--->Project.../Other...,输入Maven进行查询,选择Maven Project

最终项目结构

注意:如果项目的目录结构不正确,或者项目中的jar包下载不完整,可以更新当前项目,步骤如下:

  解释:如果使用Eclipse工具下载jar包,添加jar包节点后会自动下载,下载不全时可以如上面操作进行更新下载。如果使用的是IDEA工具,当添加jar包节点后需要手动点击确认下载,否则不会下载,确认项在工作的右侧目录中有一个Maven的菜单,单击一下,然后弹出的菜单项上面会有一个刷新的按钮。

2.6 通过Maven工具下载jar包

假设目前项目业务中需要使用Junit单元测试jar包

1.打开浏览器,输入https://mvnrepository.com/网址

2.在当前网页的搜索框区域输入需要进行下载的jar包

(1)输入要查找的jar包

 

(2)点击一个搜索结果进去

 

(3)点击一个版本进去

3.把jar包坐标添加到项目的pom.xml文件中并保存,需要手写添加一个dependencies节点

   <dependencies>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
     
  </dependencies>

4.查看项目中在Maven Dependencies目录下是否有下载好的jar包,如果有证明下载成功。

添加代码:

注意:有关于项目下载jar包的使用会在后续课程中持续讲解

 

posted @ 2021-07-08 23:38  Coder_Cui  阅读(128)  评论(0编辑  收藏  举报