集合框架
- 概念: 集合框架是一個(gè)用來代表和操縱集合的統(tǒng)一架構(gòu)
- 所有的集合框架都包含如下內(nèi)容:
- 接口:是代表集合的抽象數(shù)據(jù)類型灾馒。接口允許集合獨(dú)立操縱其代表的細(xì)節(jié)。在面向?qū)ο蟮恼Z言怒医,接口通常形成一個(gè)層次
- 實(shí)現(xiàn)(類):是集合接口的具體實(shí)現(xiàn)压固。從本質(zhì)上講梁棠,它們是可重復(fù)使用的數(shù)據(jù)結(jié)構(gòu)。
- 算法:是實(shí)現(xiàn)集合接口的對(duì)象里的方法執(zhí)行的一些有用的計(jì)算肥矢,例如:搜索和排序端衰。這些算法被稱為多態(tài),那是因?yàn)橄嗤姆椒梢栽谙嗨频慕涌谏嫌兄煌膶?shí)現(xiàn)甘改。
- 集合的特點(diǎn):
- 集合只用于存儲(chǔ)對(duì)象
- 集合長度是可變的
- 集合可以存儲(chǔ)不同類型的對(duì)象
集合的接口
- Collection : Collection 是最基本的集合接口旅东,一個(gè) Collection 代表一組 Object,Java不提供直接繼承自Collection的類楼誓,只提供繼承于Collection的子接口(如List和set)玉锌。
- List : List接口是一個(gè)有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置疟羹,能夠通過索引(元素在List中位置主守,類似于數(shù)組的下標(biāo))來訪問List中的元素,而且允許有相同的元素榄融。
- Set 具有與 Collection 完全一樣的接口参淫,只是行為上不同,Set 不保存重復(fù)的元素愧杯。
- Map 將唯一的鍵映射到值涎才。
Collection接口
- 特點(diǎn):
- 用來存儲(chǔ)對(duì)象的容器雖然有很多并且結(jié)構(gòu)不同,但是都具備著共性力九,可以不斷向上抽取耍铜,最終就形成集合框架,該框架的頂層之一就是Collection接口跌前。 該接口中定義了集合框架中最共性的功能棕兼。最終使用的時(shí)候,其實(shí)使用的是該框架最子類的對(duì)象抵乓。
- Collection接口及子類一次只能存放一個(gè)元素伴挚,Collection有兩個(gè)子接口:
- List(列表) 靶衍,Set(集)
- List:元素存取是有序的,可存放重復(fù)元素茎芋。
- Set:元素存取是無序的颅眶,不可以存放重復(fù)元素。
Collection接口的方法
//創(chuàng)建一個(gè)ArrayList對(duì)象
//ArrayLIst實(shí)現(xiàn)了list接口,List接口繼承Collection接口,(多態(tài)的體現(xiàn))
Collection coll = new ArrayList();
coll.add("1"); //添加一個(gè)元素
//創(chuàng)建一個(gè)新數(shù)組
Collection newColl = new ArrayList();
newColl.add("新數(shù)組");
newColl.add("新數(shù)組");
coll.addAll(newColl); //添加新數(shù)組
//是否包含某元素
System.out.println("是否包含1 = " + coll.contains("1"));
//是否包含一組元素
System.out.println("是否包含一組元素 = " + coll.containsAll(newColl));
//元素的個(gè)數(shù)
int size = coll.size();
System.out.println(size);
//是否為空
boolean isEmpty = coll.isEmpty();
//刪除某個(gè)元素
coll.remove("1");
//刪除一組元素
//coll.removeAll(newColl);
System.out.println(coll);
//轉(zhuǎn)換成數(shù)組
Object[] arr = coll.toArray();
List接口
- List是Collection接口的子接口田弥,元素存取是有序的涛酗,可存放重復(fù)元素。
- 常用子類
- ArrayList : 內(nèi)部是數(shù)組數(shù)據(jù)結(jié)構(gòu)偷厦,是不同步的煤杀。查詢的速度快;
- LinkedList : 內(nèi)部是鏈表數(shù)據(jù)結(jié)構(gòu),是不同步的沪哺。增刪速度很快;
List接口的方法
*List作為Collection的子接口,具備Collection中的方法酌儒。
由于List接口是有序的辜妓,也具有一些特有的方法 :
//list 集合比collection多一部分關(guān)于下標(biāo)的操作,
//例如插入元素到什么位置,根據(jù)位置刪除元素
List list = new ArrayList();
//添加一個(gè)元素
list.add("12");
list.add("13");
list.add("3");
list.add("23");
//根據(jù)下標(biāo)查找元素
Object object = list.get(1);
//根據(jù)元素查找下標(biāo)
int index = list.indexOf("2");
//修改 1,元素的下標(biāo) 2,元素的新值;
list.set(1, "修改的元素");
//截取子串 1,開始的下標(biāo) 2,結(jié)束的下標(biāo)
List subList = list.subList(1, 3);
//根據(jù)下標(biāo)刪除元素 參數(shù):下標(biāo)
list.remove(1);
//根據(jù)元素刪除元素 參數(shù):元素
list.remove("4");
System.out.println(list);
//清空集合
list.clear();
ArrayList 類
-
概述:
- ArrayList 是一個(gè)數(shù)組隊(duì)列,相當(dāng)于動(dòng)態(tài)數(shù)組忌怎。它繼承于AbstractList籍滴,實(shí)現(xiàn)了List,Serializable等接口榴啸。提供了相關(guān)添加孽惰、刪除、修改鸥印、遍歷等功能勋功。ArrayList中的操作不是線程安全的!建議在單線程中才使用ArrayList库说。
ArrayList list = new ArrayList();
list.add("1"); list.add("2"); list.add("3"); //刪除元素 //根據(jù)下標(biāo)刪除元素 list.remove(1); //根據(jù)元素刪除元素 list.remove("2"); //更新元素 list.set(1, "更新的元素"); //查找元素 Object object = list.get(1); //是否包含某元素 boolean isContain = list.contains("3"); //元素的個(gè)數(shù) int size = list.size();
LinkedList類
- 概述
- LinkedList 內(nèi)部是鏈表數(shù)據(jù)結(jié)構(gòu)狂鞋,允許有null(空)元素。LinkedList 查找效率低潜的。
如果刪除,添加操作比較多,就用LinkedList
如果查找,更新操作較多,就用ArrayList
- LinkedList 常用方法
LinkedList list = new LinkedList();
list.add("1");
list.add("2");
list.add("3");
//刪除元素
//根據(jù)下標(biāo)刪除元素
list.remove(1);
//根據(jù)元素刪除元素
list.remove("2");
//更新元素
list.set(1, "更新的元素");
//查找元素
Object object = list.get(1);
//是否包含某元素
boolean isContain = list.contains("3");
//元素的個(gè)數(shù)
int size = list.size();
Map類
//Map (鍵值結(jié)構(gòu))
//key/value
HashMap map = new HashMap();
//存值
map.put("a", "值");
map.put("b", "值1");
map.put("c", "值2");
map.put("z", "值3");
//取值
String value = (String)map.get("c");
System.out.println("key對(duì)應(yīng)的值:" + value);
//修改
map.put("z", "修改的值");
//如果key存在,修改, 如果key不存在,添加;
//值是可以重復(fù)的,鍵不能重復(fù)
//刪除
map.remove("a");
//遍歷map
Set keySet = map.keySet(); //用集合接收獲取所有的鍵
//Collection valueSet = map.values(); //獲取所有的值
//for (類型 變量名 : 集合) {}
for (Object object : keySet) {
System.out.print("key = " + object);
System.out.print(",");
System.out.println("value = " + map.get(object));
}