Ⅰ JAVA中,常用的隊列實現是哪個
隊列的實現單純的是數據結構的問題,既可以用鏈表結構實現隊列,也可以用數組實現。這和語言不是緊密關系,java可以這樣實現,c、c++
也可以。
Ⅱ java常用的幾種數據結構,堆棧,隊列,數組,鏈
下面給你簡單介紹:堆棧,隊列,數組,鏈表
堆棧
採用該結構的集合,對元素的存取有如下的特點:
先進後出(即,存進去的元素,要在後它後面的元素依次取出後,才能取出該元素)。例如,子彈壓進彈夾,先壓進去的子彈在下面,後壓進去的子彈在上面,當開槍時,先彈出上面的子彈,然後才能彈出下面的子彈。
棧的入口、出口的都是棧的頂端位置
壓棧:就是存元素。即,把元素存儲到棧的頂端位置,棧中已有元素依次向棧底方向移動一個位置。
彈棧:就是取元素。即,把棧的頂端位置元素取出,棧中已有元素依次向棧頂方向移動一個位置。
隊列
採用該結構的集合,對元素的存取有如下的特點:
先進先出(即,存進去的元素,要在後它前面的元素依次取出後,才能取出該元素)。例如,安檢。排成一列,每個人依次檢查,只有前面的人全部檢查完畢後,才能排到當前的人進行檢查。隊列的入口、出口各佔一側。
數組
採用該結構的集合,對元素的存取有如下的特點:
查找快:通過索引,可以快速訪問指定位置的元素
增刪慢:
指定索引位置增加元素:需要創建一個新數組,將指定新元素存儲在指定索引位置,再把原數組元素根據索引,復制到新數組對應索引的位置。
鏈表
採用該結構的集合,對元素的存取有如下的特點:
多個節點之間,通過地址進行連接。例如,多個人手拉手,每個人使用自己的右手拉住下個人的左手,依次類推,這樣多個人就連在一起了。
節點:兩個部分:數據域(存儲的數值),指針域(存儲地址)
查找慢:想查找某個元素,需要通過連接的節點,依次向後查找指定元素
增刪快:
增加元素:操作如左圖,只需要修改連接下個元素的地址即可。
刪除元素:操作如右圖,只需要修改連接下個元素的地址即可。
阻塞隊列與普通隊列的區別在於,當隊列是空的時,從隊列中獲取元素的操作將會被阻塞,或者當隊列是滿時,往隊列里添加元素的操作會被阻塞。試圖從空的阻塞隊列中獲取元素的線程將會被阻塞,直到其他的線程往空的隊列插入新的元素。同樣,試圖往已滿的阻塞隊列中添加新元素的線程同樣也會被阻塞,直到其他的線程使隊列重新變得空閑起來,如從隊列中移除一個或者多個元素,或者完全清空隊列.
Ⅳ Java EE的基本學習路線是什麼
可從事崗位:初級JAVA軟體工程師
Java核心編程(15天) JavaSE編程基礎 介紹JavaEE的應用領域及整體技術體系,生態圈,以及當前就業環境。強調學習紀律及相關約定,講師的個人介紹;DOS常用命令;安裝JDK、設置環境變數;DOS系統編譯、執行Java程序;Java的注釋;標識符、標識符的命名規范;Java 關鍵字;Java的數據類型;變數的定義及初始化;Java的運算符;表達式;轉義字元;運算符的優先順序;類型轉換;Java分支if...else;多重if、嵌套if;Java switch;switch vs if;Java循環 for、while 、do-while;循環的嵌套;break、continue、return;方法的定義;方法的形參和實參;無返回值的方法;有返回值的方法;方法的重載
Java數組 Java 數組的定義;數組的靜態賦值;數組的動態賦值;數組單個元素的訪問;數組的遍歷訪問;數組的增強for循環;數組的排序;數組的順序查找;數組的二分法查找;命令行參數args的使用;可變參數的應用;Arrays工具類的使用;二維數組的使用
Java面向對象 面向對象的分析與設計;面向對象與面向過程的區別;Java與面向對象;類的定義;對象的定義;類中成員變數及方法的定義;構造方法的定義和調用;構造方法的重載;面向對象的封裝特性;this調用屬性、方法、構造方法;局部變數和成員變數的作用域問題;static靜態屬性、方法、代碼塊;工具類的概念及工具類的製作;super關鍵字的使用及理解;Java中訪問許可權控制機制;繼承中構造方法的細節;方法的重寫;equals及toString方法的正確理解;Java中的包機制;抽象類,介面,多態;對象的轉型;final修飾類、屬性、方法;抽象類,介面;多態機制;內部類;通過內部類製作性能檢測工具;Java的內存分析
常用基礎類 常用數據類型的包裝類;String、StringBuffer、StringBuilder;Date的使用;SimpleDataFormate對日期和字元串之間的轉換處理;Calendar日歷類的使用;Math常用方法;Random類;Runtime類;System 類;Java8特性
集合 集合框架體系介紹;集合框架與數組的對比;集合框架之Collection介面;集合框架之List介面;ArrayList和LinkedList的使用;深入源碼探究ArrayList和LinkedList的工作原理;迭代器的工作原理;迭代器的使用;集合框架之Set;HashSet和TreeSet的使用;深入源碼探究HashSet和TreeSet的工作原理;HashMap和TreeMap的使用;分析Map和Set的之間的關系;Collections工具類
異常處理 Java的異常體系;異常的概念及分類;異常的處理方式;異常設計原則;自定義異常
線程和I/O I/O;NIO;文件操作;多線程;線程池;同步;線程調度;多線程下載;網路http、socket;基於HTTP協議訪問網路資源、XML解析;文件的下載;ThreadLocal
項目 FTP伺服器、多人聊天伺服器
第二階段:JavaWeb實戰(25天)
可從事崗位:WEB初級前端開發工程師,初級BI工程師
JavaWeb實戰(25天) HTML5 HTML的作用;全局標簽;絕對路徑與相對路徑;常見標簽;字元集;表單標簽;布局指定的網頁
CSS3 CSS聲明類型;常見的各種屬性;圓角屬性:border-radius的使用;陰影屬性:box-shadow的用法;背景屬性擴展:多背景應用;新的顏色表示方式:HSLA色輪模式;浮動;完成自己的初級課頁面實戰
Javascript JavaScript基本語法;JavaScript數據類型;JavaScript對象和常用對象;history對象;location對象;bom對象;表單對象;DOM對象;window對象;常用事件;選項卡、幻燈片、貪吃蛇、瀑布流各種特效
MySQL使用 Mysql資料庫;MySql命令行客戶端的使用;MySql圖形化客戶端的使用;SQL語句介紹;DDL;DML;DQL;多表的聯合查詢;子查詢;排序、聚合、分組
JDBC連接池 JDBC的介紹;採用JDBC實現CRUD;採用PrepareStatement防止SQL注入,提高安全性
Servlet Tomcat與idea的集成開發;什麼是Servlet;Servlet接收客戶端請求信息;Servlet響應客戶端信息;Servlet的生命周期;什麼是JSP;JSP的內置對象;透析JSP的本質;JSTL+EL;MVC介紹;分層的重要性;MySql的事務特性;MySql的事務實現;Session的使用;Cookie的使用;實現系統的安全控制;DBCP連接池的使用;C3P0連接池的使用;DBUils;實現用戶的自動登錄;文件的上傳;文件的下載;過濾器解決編碼問題;過濾器解決安全驗證問題;監聽器;反射、註解、泛型
MVC 設計模式;ORM原理;自定義框架
ajax Ajax的工作原理;JSON解析;Ajax 數據格式(XML格式、HTML格式、JSON格式、各種格式對比);使用 jQuery 實現 Ajax(load()方法、$.get()方法、$.post()方法、序列化、Ajax應用);聊天室小實例
jQuery jQuery選擇器;jQuery的常用事件;事件冒泡;事件委派;jQuery中的動化;模擬操作;jQuery綜合實例
Bootstrap 響應式設計;Bootstrap安裝;Bootstrap 組件;進度條和列表組件;Bootstrap綜合實例
項目 講解項目開發流程;項目簡介;項目功能演示;項目功能實現分析;資料庫設計分析;項目架構設計分析;實現網站首頁的商品展示;實現商品詳情頁面;實現購物車功能;實現我的訂單管理;項目驗收
第三階段:企業核心框架(30天)
可從事崗位:中級BI工程師,JAVA微服務研發工程師
企業核心框架(30天) Linux基礎 Linux系統-基礎;Linux網路基礎;VMWare下安裝Linux;Linux命令;Linux下Java環境的搭建;Linux下Tomcat安裝和配置
maven Maven簡介和環境搭建;Maven構建和自動化構建;pom.xml詳細說明、依賴管理;Maven坐標、依賴、生命周期等;IDEA下的Maven使用
Git Git概述、Git與SVN對比;Git常用命令;Git分支以及代碼沖突的解決;客戶端TortoiseGit使用;IDEA中Git集成使用
Spring5 框架原理介紹;框架環境搭建;快速入門;創建Bean的方式及實現原理;Bean種類;Bean生命周期;Bean的作用域;Bean的注值方式;SpEL;整合Junit測試;Web項目集成Spring;註解裝配Bean;AOP思想;AOP原理解剖;傳統方式實現AOP開發;AspectJ介紹及實現AOP開發
SpringMVC Spring MVC 概述;使用 @RequestMapping映射請求;請求處理方法簽名概述;處理方法簽名詳細說明;使用 HttpMessageConverter;處理模型數據;數據綁定流程剖析;數據轉換;數據格式化;數據校驗;視圖和視圖解析器;處理方法的數據綁定
MyBatis 安裝和配置MyBatis;使用映射語句;執行非查詢語句;使用高級查詢技術;事務;使用動態SQL;使用高速緩存提高性能;MyBatis數據訪問對象;DAO使用進階
項目整合 使用SSM開發實際項目;通過項目理解框架
SpringData Spring Data 概述;Repository;CrudRepository;PagingAndSortingRepository;JpaRepository;條件查詢;使用@Query自定義查詢;@Query 與 @Modifying 執行更新操作;索引參數與命名參數;用@Query來指定本地查詢;為某一個 Repository 上添加自定義方法;所有的 Repository 都添加自定義的方法
Maven高級 pom文件依賴傳遞介紹;Maven繼承與聚合項目;私服倉庫介紹和搭建;公共模塊上傳到私服、引用私服jar包;Maven常用插件使用;使用Maven的profile實現多環境配置
Gitlab/Jenkins Gitlab使用;持續集成工具Jenkins使用;Jenkins+Gitlab+maven+tomcat實現自動集成、打包、部署
WebSocket WebSocket原理介紹;WebSocket的使用
RESTful http協議;RESTful規范;postman使用;spring 實現 RESTful
ECharts圖表插件 圖表介紹和選擇什麼樣的圖表;5分鍾快速上手;常用API和模塊;移動端自適應
項目一 10個大型項目選擇;各種項目特點分析;項目設計;項目分組;選擇框架;後台搭建;使用Maven構建項目;項目開發;壓力測試;webhooks項目自動部署;面試中常問到的項目問題;項目bug收集和解決;項目驗收;項目答辯
第四階段:高並發和分布式應用(40天)
可從事崗位:服務端架構師, 平台架構師
高並發和分布式應用(40天) Nginx反向代理和負載均衡 Nginx伺服器的優勢;Nginx伺服器配置;什麼是反向代理;什麼是負載均衡;負載均衡演算法;構建數十台伺服器的負載均衡環境
Docker Docker介紹;Docker安裝;Docker 常見操作;Docker 自定義鏡像;Docker Compose服務編排;Docker Compose 安裝Nexus;Docker Compose 安裝 Gitlab;Docker Compose 安裝 Docker Registry;基於Gitlab實現CI
UML和常用工具的使用 UML介紹以及在軟體開發中的應用;UML常用圖的繪制以及使用;Enterprise Architect的使用;結合UML知識對項目做需求分析;結合UML知識對項目做架構設計以及技術選型
億級並發架構演進 架構演進特點;大並發架構;微服務
MySQL高級 ACID和MySQL的實現原理;SQL優化技巧;MySQL分區;分庫分表技巧;Explain分析
MyCat分庫分表技術 MyCat介紹;分庫分開技術講解;其他的資料庫中間件;配置與自動分表
Vue Vue 入門;Vue 語法;Vue 事件;Axios 網路通信;Vue表單輸入;Vue 計算屬性;Vue內容分發與自定義事件;Vue-cli腳手架;Vue-Router 路由;Vuex 狀態管理
SpringBoot SpringBoot基本介紹和使用;SpringBoot的核心功能;SpringBoot開發web項目;SpringBoot整合Junit以及MockMvc的使用;SpringBoot集成Swagger;Spring Data JPA 的使用;SpringBoot整合MyBatis
Shiro Authentication;Authorization;Role;編程授權;Realm;Realms的認證實現;Realms的授權實現;Spring 集成 Shiro;基於註解的授權
CAS 單點登錄介紹;CAS單點登錄配置;CAS MD5配置;CAS 鹽值MD5;CAS整合Shiro
Zookeeper/Consul Zookeeper 簡介;Zookeeper安裝;Zookeeper高可用集群;Curator-API;Zookeeper分布式鎖;統一配置管理;Consul使用
Dubbo Dubbo簡介;Spring整合Dubbo2.6x使用;Dubbo管控台;Springboot 2.x整合bbo 2.6x;Dubbo負載均衡;Dubbo集群容錯
Spring Cloud SpringCloud之 微服務簡介;SpringCloud之 Eureka;SpringCloud之 Ribbon;SpringCloud之 Feign;SpringCloud之 HyStrix;SpringCloud之 Zuul;SpringCloud之Stream;SpringCloud之Sleuth;SpringCloud之 ConfigServer;微服務安全解決方案:Oauth2/JWT
Redis NoSQL&Redis;Redis特點與優勢以及使用場景;Redis主從、哨兵、集群模式安裝配置;Redis持久化策略、淘汰策略;Redis五大數據類型和基本操作命令;SpringBoot集成Lettuce API;SpringBoot集成Redisson API分布式場景應用
Elasticsearch ElasticSearch簡介;ElasticSearch基礎入門;ElasticSearch集群以及Kibana和分詞插件的安裝;ElasticSearch索引、分片創建與管理;ElasticSearch基本搜索;ElasticSearch組合搜索;Elasticsearch全文檢索,高亮顯示;Elasticsearch Java High Level REST Client使用
RabbitMQ 隊列 RabbitMQ 簡介;RabbitMQ 安裝;RabbitMQ賬戶;RabbitMQ消息模式;Spring整合RabbitMQ;SpringBoot整合RabbitMQ;消息確認機制;消息延遲隊列;RabbitMQ高可用集群
分布式事務 分布式事務場景;分布式事務解決方案;CAP理論;兩段提交協議;三段提交協議;MQ事務消息;TX-LCN/TCC-Transaction
分布式任務(Quartz/Elastic-Job) Quartz基本使用;Quartz不同觸發器;Quartz自動化任務;Spring定時任務;Spring整合Quartz;Elastic-Job分布式任務
微信開發 微信公眾號;微信支付;微信小程序
綜合項目實戰 15個大型項目選擇;各種項目特點分析;項目設計;項目分組;選擇框架;後台搭建;使用Maven構建項目;項目開發;壓力測試;項目自動部署;面試中常問到的項目問題;項目bug收集和解決;項目上線;項目驗收;項目答辯
Ⅳ java中怎麼實現隊列
public class Queue<E> {
private Object[] data=null;
private int maxSize; //隊列容量
private int front; //隊列頭,允許刪除
private int rear; //隊列尾,允許插入
//構造函數
public Queue(){
this(10);
}
public Queue(int initialSize){
if(initialSize >=0){
this.maxSize = initialSize;
data = new Object[initialSize];
front = rear =0;
}else{
throw new RuntimeException("初始化大小不能小於0:" + initialSize);
}
}
//判空
public boolean empty(){
return rear==front?true:false;
}
//插入
public boolean add(E e){
if(rear== maxSize){
throw new RuntimeException("隊列已滿,無法插入新的元素!");
}else{
data[rear++]=e;
return true;
}
}
//返回隊首元素,但不刪除
public E peek(){
if(empty()){
throw new RuntimeException("空隊列異常!");
}else{
return (E) data[front];
}
}
//出隊
public E poll(){
if(empty()){
throw new RuntimeException("空隊列異常!");
}else{
E value = (E) data[front]; //保留隊列的front端的元素的值
data[front++] = null; //釋放隊列的front端的元素
return value;
}
}
//隊列長度
public int length(){
return rear-front;
}
}