java 劊子手游戲_java基礎(九):容器

集合的引入

List (ArrayList LinkedList)

Set (HashSet LinkedHashSet TreeSet )

Map (HashMap LinkedHashMap TreeMap)

Collections

Iterator

使用泛型

1.為什么使用集合而不是數組?

集合和數組相似點

都可以存儲多個對象,對外作為一個整體存在

數組的缺點

長度必須在初始化時指定,且固定不變

數組采用連續存儲空間,刪除和添加效率低下

數組無法直接保存映射關系

數組缺乏封裝,操作繁瑣

2.集合架構

Java集合框架提供了一套性能優良、使用方便的接口和類,它們位于java.util包中

009086139a90f0c5001d8f2a78739bb4.png

Collection 接口存儲一組不唯一,無序的對象

List 接口存儲一組不唯一,有序(索引順序)的對象

Set 接口存儲一組唯一,無序的對象

Map接口存儲一組鍵值對象,提供key到value的映射

Key 唯一 無序

value 不唯一 無序

2.1?List

特點:有序? 不唯一(可重復)

ArrayList:ArrayList是一個對數組進行了封裝的容器。使用過程中ArrayList對于數據的查找及遍歷效率較高。

在內存中分配連續的空間,實現了長度可變的數組

優點:遍歷元素和隨機訪問元素的效率比較高

缺點:添加和刪除需大量移動元素效率低,按照內容查詢效率低,

ArrayList常用方法

Add() :向現有集合中添加或插入一個元素

Get() :獲取指定索引位置的元素

Set() :設置指定索引位置的元素值

Clear() :清除所有的元素值

Remove() :刪除指定索引位置的元素

Size() :獲取容器中元素的個數

LinkedList:LinkedList在底層是一雙向鏈表的形式進行實現,LinkedList在執行數據的維護過程中效率較高。LinkedList允許以隊列或棧的方式訪問數據。

采用鏈表存儲方式。

缺點:遍歷和隨機訪問元素效率低下

優點:插入、刪除元素效率比較高(但是前提也是必須先低效率查詢才可。如果插入刪除發生在頭尾可以減少查詢次數)

LinkedList常用方法:

getFirst() :獲取列表中的第一個元素

getLast() :獲取列表中的最后一個元素

peek() :以隊列的方式獲取列表數據(獲取不刪除)

poll() :以隊列的方式獲取列表數據(獲取并刪除)

push() :以棧的方式將數據壓入到列表中

pop() :以出棧的方式訪問元素(獲取并刪除)

其他方法參見ArrayList

List的遍歷方法

for

for-each

Iterator迭代器

集合中內容是否相同

通過equals進行內容比較,而是==引用比較

2.2?Set

特點:無序 唯一(不重復)

HashSet

采用Hashtable哈希表存儲結構(神奇的結構)

優點:添加速度快 查詢速度快 刪除速度快

缺點:無序

HashSet常用方法:

Add() :向集合中添加一個元素

Clear() :清除集合中所有元素

Remove() :按照元素之刪除集合中指定的元素

注意:HashSet中不支持下標方式訪問及修改元素值。

LinkedHashSet

采用哈希表存儲結構,同時使用鏈表維護次序

有序(添加順序)

2590d46224aa5f627788f65d5563d0cf.png

TreeSet

采用二叉樹(紅黑樹)的存儲結構

優點:有序 查詢速度比List快(按照內容查詢)

缺點:查詢速度沒有HashSet快

f0b5d67fa29aa9cf2af4ec73da35eed1.png

Set常用方法

Set相對Collection沒有增加任何方法

Set的遍歷方法

for-each

Iterator迭代器

無法使用for進行遍歷(因為無序,所以沒有get(i))

HashSet、HashMap或Hashtable中對象唯一性判斷

重寫其hashCode()和equals()方法

TreeSet中指明排序依據

實現Comparable接口 創建實現Compator接口的類。

哈希表存儲原理

2.3?Map

特點 key-value映射

HashMap

Key無序 唯一 (Set)

Value 無序 不唯一 (Collection)

LinkedHashMap

有序的HashMap 速度快

TreeMap

有序 速度沒有hash快

問題:Set和Map有關系嗎?

采用了相同的數據結構,只用于map的key存儲數據,就是Set

3.?Collections

專門用來操作集合的工具類

構造方法私有,禁止創建對象

提供一系列靜態方法實現對各種集合的操作

具體操作:搜索、復制、排序、線程安全化等

常用方法

Collections.addAll(list, "aaa","bbb","ccc","ccc");

int index = Collections.binarySearch(list, "ccc");

Collections.copy(list2, list);

Collections.fill(list3, "888");

String max = Collections.max(list4);

String min = Collections.min(list4);

Collections.reverse(list4);

List list5 = Collections.synchronizedList(list4);

4.?Iterator

所有集合類均未提供相應的遍歷方法,而是把把遍歷交給迭代器完成。

迭代器為集合而生,專門實現集合遍歷

Iterator是迭代器設計模式的具體實現

Iterator方法

boolean hasNext(): 判斷是否存在另一個可訪問的元素

Object next(): 返回要訪問的下一個元素

void remove(): 刪除上次訪問返回的對象。

問題:可以使用Iterator遍歷的本質是什么

實現Iterable接口

For-each循環

增強的for循環,遍歷array 或 Collection的時候相當簡便

無需獲得集合和數組長度,無需使用索引訪問元素,無需循環條件

遍歷集合時底層調用Iterator完成操作

For-each缺陷:

數組:

不能方便的訪問下標值

不要在for-each中嘗試對變量賦值,只是一個臨時變量

集合:

與使用Iterator相比,不能方便的刪除集合中的內容

For-each總結:

除了簡單遍歷并讀出其中的內容外,不建議使用增強for

5.泛型

JDK1.4以前類型不明確: 裝入集合的類型都被當作Object對待,從而失去自己的實際類型。 從集合中取出時往往需要轉型,效率低,容易產生錯誤。

泛型:在定義集合的時候同時定義集合中對象的類型

好處: 增強程序的可讀性和安全性

6.術語辨析

集合和數組的比較

Collection和Collections的區別

ArrayList和LinkedList 的聯系和區別

Vector和ArrayList的聯系和區別

HashMap和Hashtable的聯系和區別

集合和數組的比較:

數組不是面向對象的,存在明顯的缺陷,

集合完全彌補了數組的一些缺點,比數組更靈活更實用,

可大大提高軟件的開發效率而且不同的集合框架類可適用于不同場合。具體如下:

1:數組能存放基本數據類型和對象,而集合類中只能放對象。

2 : 數組容量固定且無法動態改變,集合類容量動態改變。

3:數組無法判斷其中實際存有多少元素,length只告訴了array容量

4:集合有多種實現方式和不同適用場合,不像數組僅采用順序表方式

5:集合以類的形式存在,具有封裝、繼承、多態等類的特性,通過簡單的方法和屬性調用即可實現各種復雜操作,大大提高軟件的開發效率

ArrayList和LinkedList 的聯系和區別

聯系: 都實現了List接口 有序 不唯一(可重復)

ArrayList

在內存中分配連續的空間,采用了順序表結構,實現了長度可變的數組

優點:遍歷元素和隨機訪問元素的效率比較高

缺點:添加和刪除需大量移動元素效率低,按照內容查詢效率低,

LinkedList

采用鏈表存儲方式。

缺點:遍歷和隨機訪問元素效率低下

優點:插入、刪除元素效率比較高(但是前提也是必須先低效率查詢才可。如果插入刪除發生在頭尾可以減少查詢次數)

Collection和Collections的區別:

Collection是Java提供的集合接口,存儲一組不唯一,無序的對象。它有兩個子接口List和Set。

Java中還有一個Collections類,專門用來操作集合類 ,它提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。

Vector和ArrayList的聯系和區別:

實現原理相同,功能相同,都是長度可變的數組結構,很多情況下可以互用

兩者的主要區別如下:

Vector是早期JDK接口,ArrayList是替代Vector的新接口

Vector線程安全,ArrayList重速度輕安全,線程非安全

長度需增長時,Vector默認增長一倍,ArrayList增長50%

HashMap和Hashtable的聯系和區別

實現原理相同,功能相同,底層都是哈希表結構,查詢速度快,在很多情況下可以互用

兩者的主要區別如下:

Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口

Hashtable繼承Dictionary類,HashMap實現Map接口

Hashtable線程安全,HashMap線程非安全

Hashtable不允許null值,HashMap允許null值

7.小結

83ac6ff11a598b87cbb53e98c3c65fa7.png

104c64365d812284368104ca9ccacd0e.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534468.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534468.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534468.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java面試手寫單鏈表_(轉)面試大總結之一:Java搞定面試中的鏈表題目

packageLinkedListSummary;importjava.util.HashMap;importjava.util.Stack;/*** http://blog.csdn.net/luckyxiaoqiang/article/details/7393134 輕松搞定面試中的鏈表題目* http://www.cnblogs.com/jax/archive/2009/12/11/1621504.html 算法大全(1)單鏈表** 目錄&#xff1a…

ccf認證俄羅斯方塊java_CCF認證歷年試題 - osc_h3robkrt的個人空間 - OSCHINA - 中文開源技術交流社區...

CCF認證歷年試題不加索引整理會死星人orz第一題:CCF201712-1 最小差值(100分)CCF201703-1 分蛋糕(100分)CCF201612-1 中間數(100分)CCF201609-1 最大波動(100分)CCF201604-1 折點計數(100分)CCF201509-1 數列分段(100分)CCF201503-1 圖像旋轉(100分)CCF201412-1 門禁…

mysql 變量作表名查詢_使用MySQL函數變量作為表名查詢

我需要有一個表中增加一定的ID(如AUTO_INCREMENT)函數使用MySQL函數變量作為表名查詢我有水木清華這樣DELIMITER $$DROP FUNCTION IF EXISTS GetNextID$$CREATE FUNCTION GetNextID(tblName TEXT, increment INT)RETURNS INTDETERMINISTICBEGINDECLARE NextID INT;SELECT MAX(c…

java 簽名 ecdsa_Java實現ECDSA簽名算法

ECDSA簽名算法package com.albedo.security;/*** DSA 加解密實現*/public class ECDSAUtils extends Base {//字符編碼public static final String ALGORITHM "EC";public static final String SIGN_ALGORITHM "SHA1withECDSA";/*** ECDSA 驗簽** param …

java異常處理方式推薦做法_談談Java異常處理這件事兒

此文已由作者謝蕾授權網易云社區發布。歡迎訪問網易云社區,了解更多網易技術產品運營經驗。前言我們對于“異常處理”這個詞并不陌生,眾多框架和庫在異常處理方面都提供了便利,但是對于何種處理才是最佳實踐,也是眾說紛紜。異常處…

as400和java的區別_文件傳輸協議和AS400

我目前收到以下錯誤:遠程服務器返回錯誤:(501)參數或參數中的語法錯誤 .我已經檢查了服務器并且文件確實存在,如果我打開命令提示符并鍵入以下代碼它可以工作:ftpopen 192.168.1.2cd /Imagesget S12345.jpeg這是正常的&#xff0c…

java中同時兩人提交數據_如何一起發送JSON請求和發布表單數據請求?

所以這是一個應該在POST請求中接受以下參數的API:token (as form data)apiKey (as form data){"notification": {"id": 1,"heading": "some heading","subheading": "some subheading","image&qu…

java 64內存不足_請教一個 Java 內存占用的問題

第 1 條附言 364 天前2020-03-04 01:08:55.525 [HikariPool-1 housekeeper] WARN c.z.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta1m5s643ms48?s450ns).2020-03-04 01:09:08.516 [task-11] ERROR o.s.s.s.TaskU…

java 抽象類 final_final/抽象類/interface

lesson Thirteen                          2018-05-10 02:10:43final:最終的,可以修飾類、屬性、方法1.final修飾類:這個類就不能被繼承,如:String類,StringBuffer類,System類1…

java char i=2+#039;2#039;;_P039 二維數組的字符按列存放到字符串中 ★★

所屬年份:2010.9;2011.9;2012.3請編寫函數fun,該函數的功能是:將M行N列的二維數組中的字符數據,按列的順序依次放到一個字符串中。例如,若二維數組中的數據為W W W WS S S SH H H H則字符串中的內容應是:WSHWSHWSHWSH。#include#define M 3#d…

java io中斷_JDK源碼閱讀:InterruptibleChannel 與可中斷 IO

來源:木杉的博客 ,imushan.com/2018/08/01/java/language/JDK源碼閱讀-InterruptibleChannel與可中斷IO/Java傳統IO是不支持中斷的,所以如果代碼在read/write等操作阻塞的話,是無法被中斷的。這就無法和Thead的interrupt模型配合使…

java值棧_Struts2學習筆記-Value Stack(值棧)和OGNL表達式

只是本人的Struts2學習筆記,關于Value Stack(值棧)和OGNL表達式,把我知道的都說出來,希望對大家有用。一,值棧的作用記錄處理當前請求的action的數據。二,小例子有兩個action:Action1和Action2Action1有兩個…

php項目實戰流程_一個完整的php流程管理實例代碼分享

1. 添加新流程頁面:請選擇流程節點:session_start();include("../DBDA.class.php");$db new DBDA();$suser "select * from users";$auser $db->Query($suser);foreach($auser as $v){echo " {$v[2]} ";}?>$att…

php cdata,PHPcdata處理(詳細介紹)_PHP教程

PHPcdata處理(詳細介紹)_PHP教程當時在網上找了一個CDATA的轉換器, 修改之后, 將CDATA標簽給過濾掉。如下代碼如下:// States://// out// // // // // // // // in// ]// ]]//// (Yes, the states a represented by strings.)//$state out;$a s…

PHP 與go 通訊,Golang和php通信

不同語言之間的通信方式有很多種,這里我介紹一種最簡單通信方式,json-rpc。Golang自帶json-rpc包,使用起來十分簡單,示例如下,提供一個簡單echo server。package mainimport ("fmt""net""net…

php 接口日志,PHP 開發 APP 接口--錯誤日志接口

APP 上線以后可能遇到的問題:① APP 強退② 數據加載失敗③ APP 潛在問題錯誤日志需要記錄的內容數據表 error_log 字段:idapp_id:app 類別 iddid:客戶端設備號version_id:版本號version_mini:小版本號erro…

php 空模塊,tp5.1配置空模塊,空方法

config/app.php//默認的空模塊名empty_module>index,controller/Error.php<?php namespace app\index\controller;use Env;use think\Controller;class Error extends Controller {//Db::connect(db_ck)//全局MISS路由 在route.php里面設置找不到控制器默認處理//Route:…

centos7php自啟動,centos7系統下nginx安裝并配置開機自啟動操作

這篇文章主要介紹了centos7系統下nginx安裝并配置開機自啟動操作方法,非常不錯&#xff0c;具有參考借鑒價值&#xff0c;需要的朋友可以參考下這篇文章主要介紹了centos7系統下nginx安裝并配置開機自啟動操作方法,非常不錯&#xff0c;具有參考借鑒價值&#xff0c;需要的朋友…

時鐘php,php+js液晶時鐘

php代碼$size_small5;//液晶寬度$size_big25;//液晶長度$distance10;//間距$color_back"#DDDDDD";$color_dark"#CCCCCC";$color_light"#000000";$number0;?>Timer|www.ibtf.net|www.bitefu.netfunction swapcolor(obj,onoff)//改變顏色{if (…

r和matlab學哪個,初學者求教‘r*’是什么意思啊

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓PLOT(X,Y,S) where S is a character string made from one elementfrom any or all the following 3 columns:b blue . point - solidg green o circle : dottedr red x x-mark -. dashdotc cyan plus -- dashedm magenta * star…