javase知識點 ----13 (集合)
1、什麼是集合?儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。
2、集合與陣列的區別
1、陣列和集合類都是容器
2、陣列長度是固定的,集合長度是可變的。
3、陣列中可以儲存基本資料型別,集合只能儲存物件
4、陣列中儲存資料型別是單一的,集合中可以儲存任意型別的物件。
3、集合類的特點:用於儲存物件,長度是可變的,可以儲存不同型別的物件。
4、集合的三大介面
Collection: 單列集合,三個子介面
(1) List: 有儲存順序, 可重複
ArrayList: 陣列實現, 查詢快, 增刪慢。由於是陣列實現, 在增和刪的時候會牽扯到陣列增容, 以及拷貝元素. 所以慢。陣列是可以直接按索引查詢, 所以查詢時較快。 LinkedList:連結串列實現, 增刪快, 查詢慢。由於連結串列實現, 增加時只要讓前一個元素記住自己就可以, 刪除時讓前一個元素記住後一個元素, 後一個元素記住前一個元素. 這樣 的增刪效率較高但查詢時需要一個一個的遍歷, 所以效率較低。
Vector:陣列實現,和ArrayList原理相同, 但執行緒安全, 效率略低。
(2) Set: 無儲存順序, 不可重複,set中沒有索引
HashSet---底層是雜湊碼錶,基於HashMap實現的
TreeSet--- 底層是二叉樹 元素不重複,並且實現了排序。
(3)Queue:佇列,實現了先進先出
Map: 鍵值對形式儲存---Key值不允許重複,如果重複,則覆蓋。
HashMap-- key值的hashCode和equals保證元素唯一性
TreeMap--不僅可以保證key不重複,還可以對value資料進行排序。
HashTable--實現同步
Iterator:迭代介面
5、ArrayList
List的特點:有序儲存(不是資料的排序,是存入的順序),可重複
常用方法:
boolean add(Object o) 在列表的末尾順序新增元素,起始索引位置從0開始
void add(int index,Object o) 在指定的索引位置新增元素。索引位置必須介於0和列表中元素個數之間
int size() 返回列表中的元素個數
Object get(int index) 返回指定索引位置處的元素。取出的元素是Object型別,使用前需要進行強制型別轉換
boolean contains(Object o) 判斷列表中是否存在指定元素
boolean remove(Object o) 從列表中刪除元素
Object remove(int index) 從列表中刪除指定位置元素,起始索引位置從0開始
6、LinkedList
LinkedList採用連結串列儲存方式。插入、刪除元素時效率比較高
常用方法:
void addFirst(Object o) 在列表的首部新增元素
void addLast(Object o) 在列表的末尾新增元素
Object getFirst() 返回列表中的第一個元素
Object getLast() 返回列表中的最後一個元素
Object removeFirst() 刪除並返回列表中的第一個元素
Object removeLast() 刪除並返回列表中的最後一個元素
集合的三種遍歷方式:
for foreach 迭代器
迭代器的方法:
獲取到迭代器的時候,迭代器中有一個指標指向了集合中的第一個元素。
hasNext() :當前指標是否有指向元素,如果有返回true,否則返回false。
next():獲取當前指標指向的元素並返回當前元素,然後指標向下移動一個單位。
7、Vector
Vector 底層維護了一個Object陣列實現的,實現與ArrayList是一樣的,但是Vector是執行緒安全的,操作效率低。
特有的方法:
void addElement(E obj) 在集合末尾新增元素
E elementAt( int index) 返回指定角標的元素
Enumeration elements() 返回集合中的所有元素,封裝到Enumeration物件中
Enumeration 介面:
boolean hasMoreElements() 測試此列舉是否包含更多的元素。
E nextElement() 如果此列舉物件至少還有一個可提供的元素,則返回此列舉的下一個元素。
說出ArrayList與Vector的區別?
相同點:ArrayList與Vector的底層都是由Object陣列實現的。
不同點:1、ArrayList是執行緒不同步的,操作效率高。Vector是執行緒同步的,效率低。
2、ArrayList是JDK1.2出現的。Vector是jdk1.0的時候出現的。
8、HashSet
set介面特點:無儲存順序 不重複,沒有索引
不重複:彼此呼叫equals方法比較,都返回false
如果想讓重複的物件不插入,要重寫hashcode和equals方法。
注意:1、往HashSet新增元素的時候,HashSet會先呼叫元素的hashcode方法得到元素的雜湊值,然後通過元素的雜湊值經過移位等運算,就可以算出該元素在雜湊表中的儲存位置。
2、情況1:如果算出元素儲存的位置目前沒有任何元素儲存,那麼該元素可以直接儲存在該位置上。 情況2:如果算出元素儲存的位置目前已經有其它元素儲存了,那麼會呼叫該 元素的equals方法與改位置的元素再比一次,如果equals返回的是true,那麼該元素與該位置上的元素視為重複元素,不允許新增,如果equals方法返回的是false,那麼該 元素進行新增。
3、雜湊表的特點:桶式結構 一個位置可以存放多個元素
9、TreeSet
TreeSet特點:無序 不重複 可按照規則排序
注意:1、TreeSet中存放的物件必須實現Comparable介面,否則報錯
2、TreeSet儲存原理:底層使用二叉樹資料結構實現 儲存規則:左小右大
3、如果比較元素的時候,compareTo方法返回的是0,那麼該元素就被視為重複元素,不允許新增(TreeSet與hashcode和equals方法是沒有任何關係的)
10、HashMap
HashMap的特點:
HashMap中元素的key值不能重複,即彼此呼叫equals方法,返回為false。
排列順序是不固定的。底層使用雜湊表實現。如果出現了相同的鍵,那麼後新增的資料的值會取代之前的值。
常用方法
Object put(Object key, Object val) 以“鍵-值對”的方式進行儲存
Object get (Object key) 根據鍵返回相關聯的值,如果不存在指定的鍵,返回null
Object remove (Object key) 刪除由指定的鍵對映的“鍵-值對”
int size() 返回元素個數
Set keySet () 返回鍵的集合
Collection values () 返回值的集合
boolean containsKey (Object key) 如果存在由指定的鍵對映的“鍵-值對”,返回true
11、TreeMap
適用於按自然順序或自定義順序遍歷鍵(key)。
TreeMap根據key值排序,key值需要實現Comparable介面,重寫compareTo方法。TreeMap根據compareTo的邏輯,對key進行排序。
12、Properties
Properites類是Hashtable類的子類,所以也間接地實現了Map介面。在實際應用中,常使用Properties類對屬性檔案進行處理。
常用方法:load()載入檔案;
getProperty(key);通過key值獲得對應的value值
setProperty(String?key,String?value)給properties檔案中寫值。
13、Collections:是集合類的工具類,與陣列的工具類Arrays類似
使用步驟:
1、要想使用Collections工具類排序,先給實體類實現Compareable介面,重寫compareTo方法
2、Collections.sort(list) Collections類對ArrayList的排序使用
相關推薦
javase知識點 ----13 (集合)
1、什麼是集合?儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。 2、集合與陣列的區別 1、陣列和集合類都是容器 2、陣列長度是固定的,集合長度是可變的。 3、陣列中可以儲存
13.Django之數據庫models&orm連表操作補充以及其他知識點補充(二)
http 但是 int migrate .py app migration esp rfi 一.外鍵關聯。假如說,現在有兩張表,一張user表,這個表中存放了用戶賬戶信息,還有一張usertype表,這張表存放了用戶賬戶的類型。from django.db import
JavaSE學習總結(七)—— 集合
容量 內部排序 earch 生成 極限 然而 oid 小店 遍歷map 目錄 一、為什麽需要集合 二、Java常用集合類型 三、List與ArrayList 3.0、Collection常用方法 3.0.1、添加功能 3.0.2、刪除功能 3.0.3、判斷功能 3.
JavaSE核心技術——知識點總結(二)
第七章、面向物件高階特性 1、類的繼承 理解繼承的含義 在Java中定義一個類時,讓該類通過關鍵字extends繼承一個已有 的類,這就是類的繼承(泛化)。 被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類)。 子類繼承父類的所有屬性和方法,同時也
javase知識點 ----12 (java常用API)
數學類 1、Math---在java.lang包下 被final修飾,不能被繼承 所有的方法都是靜態方法,直接通過類名就可以呼叫 有兩個靜態常量 E和PI 2、常用方法 System.out.println(Math.PI); System.
javase知識點 ----21 (理解反射機制)
1、反射的概念? JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。 2、如何做到反射? 當一個位元組碼檔
javase知識點 ----20 (多執行緒)
1、程序:正在執行的程式稱作一個程序。程序負責了記憶體空間的劃分。 Windows號稱是多工的作業系統,那麼Windows是同時執行多個應用程式嗎? 從巨集觀角度:Windows確實是在同時執行多個應用程式。 從微觀角度:cpu是做了
Java知識點總結(四)泛型和集合
GenericStack<Integer> intStack = new GenericStack<>();泛型方法(靜態方法定義): public static <E extends GeometricObject> boolean equalArea(E object
react native 知識點總結(一)
修改 ltp 組件 改變 set 覆蓋 sta 一個 個數 一、關於react native 版本的升級 參照文檔:http://reactnative.cn/docs/0.45/upgrading.html react-native -v
HTML/CSS 知識點02 (轉)
標記 內邊距 -m 美化 設置 ng- 兩個 clas 黃色 一個完整的頁面由三部分構成: html:超文本標記語言 通過語義化標簽,搭建頁面"結構" css:層疊樣式表 負責頁面"樣式",美化頁面的 js:輕量級的腳本語言;交互指的是兩個地方(行為) 前
HTML/CSS 知識點01 (轉)
根目錄 col 網址 icon 數字 jpg scrip head esc 整個前端開發的工作流程 產品經理提出項目需求 UI出設計稿 前端人員負責開發靜態頁面(跟前端同步的後臺人員在準備數據) 前後臺的交互 測試 產品上線(後期項目維護) 互聯網原理 當用戶在瀏
Knowledge Tracing -- 基於貝葉斯的學生知識點追蹤(BKT)
mod 所有 strong tor mode 領域 我們 med ability 目前,教育領域通過引入人工智能的技術,使得在線的教學系統成為了智能教學系統(ITS),ITS不同與以往的MOOC形式的課程。ITS能夠個性化的為學生制定有效的 學習路徑,通過根據
HTML知識點梳理(二)
http 像素 gin 倒數 合並單元格 應該 瀏覽器 width action 一:列表標簽 列表標簽總共有三種:【無序列表】、【有序列表】、【定義列表】 無序列表:無序列表是用來表示一種沒有先後順序之分的列表項! 語法: <ul> <li&g
CSS知識點梳理(二)
其它 停止 otto mage 決定 right shadow img 字體大小 一、繼承性 特點: 1、外層元素身上的樣式會被內層元素所繼承。 2、如果內層元素與外層元素身上的樣式相同時,外層元素的樣式會被內層元素所覆蓋。 問:是不是所有的樣式都能夠被繼承呢? 答:並不是
前端筆記----jquery入門知識點總結 (轉)
outer 尺寸 對象 層級 ani 入門 fontsize fun click http://www.cnblogs.com/cwp-bg/p/7633623.html 一、jquery的加載方法 $(document).ready(function(){js代碼});
JavaSE學習總結(八)
ssa end turn 概念 tac 常用 inpu ram alt 一、理解異常及異常處理的概念 異常就是在程序的運行過程中所發生的不正常的事件,它會中斷正在運行的程序。 異常不是錯誤 程序中關鍵的位置有異常處理,提高程序的穩定性 二、掌握Java異常處理機制 Ja
javaSE-----常用類(1)
sdfs 返回值 imp 正則 reg 兩個 val 傳遞 clas 2.2 常用類----字符串處理 1 public class Bijiao { 2 3 public static void main(String[] args) { 4
javaSE---常用類(2)
static start cef cnblogs font ase pan als utf 2.2 字符串處理(2) 1 public class Panduan { 2 3 public static void main(String[] args
11.13(2)
override top ava super() return public import getdate getc package top.ELF; import java.sql.Date; public abstract class Student { p
docker探索-CentOS7中配置Docker的yum源並升級安裝docker1.13(十)
strong tro extras 配置 1.7 arc client 1.8 1.2 此處使用的是CentOS7,內核版本為 [root@localhost ~]# uname -r 3.10.0-327.el7.x86_64 該版本下,配置了yum的源為阿裏的鏡像源