長度區別:陣列長度固定,集合長度可變
內容不同:陣列只能是同一型別元素,集合可以儲存不同型別元素
元素的資料型別不同:陣列可以儲存基本型別和引用型別,集合只能儲存引用型別(物件)
集合繼承關係圖:
是所有collextion集合類的超類,是乙個抽象類
基本功能:
public static void main(string args)
高階功能:public static void main(string args)
集合的遍歷://陣列方式
//1.先轉陣列
object objs = c.toarray();
//2.按陣列方式遍歷
for(...)
//迭代器方式
//建立迭代器
iterator it = c.iterator(); //返回介面子類物件,多型應用
while (it.hasnext())
//注意:對同一物件不能多次使用next方法
基本操作同上collection父類.
特點:有序的集合
可以對元素的插入位置進行精確的控制
可根據元素的整數索引訪問元素,並搜尋元素
允許重複(與set不同)
特有功能:
public static void main(string args)
//根據索引刪除元素
list.remove(1);
system.out.println(list);
//修改元素
list.set(1, "aaa");
system.out.println(list);
//列表迭代器
listiterator lit = list.listiterator();
while (lit.hasnext())
//特有功能,獲取上乙個元素,若想逆向遍歷,必須先正向遍歷,一般無意義
while (lit.hasprevious())
}
注意問題:
併發修改異常:在迭代遍歷中加入元素,迭代器並不知道,所以報錯;迭代器遍歷元素時不能修改元素.
如何解決?
迭代器迭代元素,迭代器修改元素,使用子介面listiterator可以新增元素,新新增的元素就在迭代元素後面
集合遍歷元素,集合修改元素(for迴圈),但元素會在最後新增
list類的三個子類:
arraylist類:底層資料結構是陣列,查詢快,增刪慢,執行緒不安全,效率高
vector:底層資料結構是陣列,查詢快,增刪慢,執行緒安全,效率低
linkedlist:底層是鍊錶實現,並且是雙重鍊錶,查詢慢,但是增刪快,執行緒不安全,效率高
listlist = colloections.synchronizedlist(new arraylist(string);
arraylist子類:
操作等已在collection類中演示
vector子類:
特有功能:
public static void main(string args)
//特有迭代
enumeration en = v.elements(); //返回的是實現類的物件
while (en.hasmoreelements())
//迭代器
iterator iterator = v.iterator();
while (iterator.hasnext())
}
linkedlist子類:
特有功能:
public static void main(string args)
arrays工具類與集合轉換:string strarr = ;
listlist = arrays.aslist(strarr);
for (string s : list)
注意:把陣列轉換成集合時長度不變,本質上仍是乙個陣列
集合巢狀:public static void main(string args) }}
特點:
無序(儲存順序和取出順序不一致)
唯一(不重複)
hashset子類:
可以重寫equals方法,判斷是否是相同物件
底層是雜湊表
linkedhashset子類:
是set的雜湊表和煉表實現,其它都相同
特點:鍊錶特性保證元素有序
treeset子類:
能夠對元素進行某種規則進行排序
自然排序:乙個類如果需要自然排序,就必須實現介面comparable並實現compareto()方法
比較器排序:單獨建立比較類並實現介面comparable並實現compareto()方法
collection是單列集合的頂層介面,collections是針對集合操作的工具類,比如排序和查詢等.
常見用法:
public static void main(string args)
map集合是鍵值對雙列集合
鍵是唯一的,值可重複,且一一對應
基於雜湊表的map介面實現,用來保證鍵的唯一性
基礎功能:
public static void main(string args)
高階功能(獲取):public static void main(string args)
//獲取所有值的集合
collectioncon = m.values();
for (string value : con)
}
集合遍歷:public static void main(string args)
//方式2,獲取所有鍵值對物件
set> en = m.entryset();
for (map.entryobj : en)
}
特點:
具有可預知的迭代順序,且唯一
支援自然排序和比較器排序
自然排序:類實現compareto介面,並重寫compareto方法.
public class student implements comparable
}
比較器排序:在初始化集合的時候重寫呼叫比較器構造方法treemaptm = new treemap(new comparator()
});
前者執行緒不安全,效率高;後者執行緒安全,效率低
前者允許null和null值,後者不允許
不是,list,set 不繼承,它們繼承collection.
map本身是乙個頂層介面
區別:collection類:單列集合
list(有序,可重複):
set(無序,唯一):
如何保證唯一性:-linkedhashset: 是hashset的子類,底層是鍊錶和雜湊表組成,鍊錶保證有序,雜湊表保證唯一.先判斷hashcode是否相同,否就就新增到集合,是就再比較equals,否就新增,是就是重複不新增
如何保證唯一性?根據比較值是否為0
如何保證元素排序?map(雙列集合):兩種方式,自然排序(元素具備比較性)和比較器排序(集合具備比較性)
注意: map集合的資料僅僅針對鍵有效,與值無關
hashmap:底層是雜湊表,執行緒不安全,依賴hashcode()和equals().自定義類需要自動生成這兩個方法,不支援排序
如何保證唯一性:linkedhashmap:是hashset的子類,底層是鍊錶和雜湊表組成,鍊錶保證有序,雜湊表保證唯一.先判斷hashcode是否相同,否就就新增到集合,是就再比較equals,否就新增,是就是重複不新增
hashtable: 執行緒安全的hashmap
treemap:底層資料結構是紅黑樹(是一種自平衡的二叉樹,保證深度不會太深),支援排序
如何保證唯一性?根據比較值是否為0
如何保證元素排序?兩種方式,自然排序(元素具備比較性)和比較器排序(集合具備比較性)
java基礎知識整理
一。構造方法,構造 塊,靜態 塊,靜態方法的區別 public class hellob extends helloa public hellob static 構造 塊 是給所有的物件進行初始化,也就是說,所有的物件都會呼叫乙個 塊。只要物件一建立。就會呼叫這 個 塊。建構函式 是給與之對應的物件...
Java基礎知識 集合框架
student arr new student 5 儲存學生物件 arr 0 new student 張三 23 arr 1 new student 李四 24 arr 2 new student 王五 25 arr 3 new student 趙六 26 arr 4 new student 馬哥 ...
JAVA集合相關基礎知識
1 collection 是集合的頂層結構,定義了集合的共性功能。1.1 成員方法 a 新增功能 boolean add object obj 往集合中新增乙個元素 boolean addall collection c 往集合中新增多個元素 b 刪除功能 void clear 清空所有元素 boo...