1.java集合框架概述
java SE包含了由一組類和接口組成的java集合框架(java Collection Framework,簡(jiǎn)稱JCF),其主要功能是用來將存儲(chǔ)的數(shù)據(jù)以某種結(jié)構(gòu)組織,并以特定的方式來訪問這些數(shù)據(jù),其目標(biāo)是提供一個(gè)處理對(duì)象集合的通用框架,減少程序員處理不同對(duì)象集合時(shí)的編碼量。
集合類中的一些區(qū)別,除了它們是否支持重復(fù)元素操作外,還包括元素是否有順序,以及是否允許添加null元素。java集合框架中根據(jù)這三個(gè)區(qū)別,將對(duì)象的存儲(chǔ)方式分為三種類型,分別是:
1.Set(集):對(duì)象容器中的對(duì)象沒有順序,且不能重復(fù)。
2.List(列表):對(duì)象容器中的對(duì)象按照索引順序排序,而且可以有重復(fù)的對(duì)象。
3.Map(映射):對(duì)象容器中的元素包含一對(duì)“鍵對(duì)象-值對(duì)象”映射,其中鍵對(duì)象不能重復(fù),值對(duì)象可以重復(fù)。
為支持對(duì)象的排序和遍歷訪問操作,java集合框架中又提供了幾個(gè)接口:
1.接口SortedSet為Set類型容器提供拍戲功能。
2.接口SortedMap為Map類型容器提供對(duì)鍵對(duì)象的排序。
3.接口Comparable和comparator用來實(shí)現(xiàn)集合中對(duì)象的排序。
2.Collection接口和Iterator接口
Collection接口中定義了Collection對(duì)象共有的一些基本方法
方法 描述
int size()返回當(dāng)前集合中包含的元素個(gè)數(shù)
isEmpyt()判斷集合中是否含有元素
boolean contains(Objact o)判斷集合中是否含有某一指定元素
add(Objact o)向集合中添加某一個(gè)元素
remove(Objact o)從集合中刪除某一元素
Iterator iterator()返回一個(gè)遍歷器,用來訪問集合中的各個(gè)元素
Iterator接口是一種用于遍歷集合的接口。
Iterator接口中的方法方法描述
hasNext()如果集合中還有更多元素,該方法返回true
next()返回集合中的下一個(gè)元素
remove()刪除Iterator返回的最后一個(gè)元素
1.List接口
List接口繼承自Collection接口,它有如下特點(diǎn):
1.List中的元素是有順序的。
2.List通常允許重復(fù)元素。
3.List的實(shí)現(xiàn)類通常支持null元素。
4.可以通過索引訪問List對(duì)象容器中的元素。
List接口最常用的實(shí)現(xiàn)類是ArrayList類和LinkedList類。
1).ArrayList
程序?qū)嵗?div style="height:15px;">
package lei; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List list = new ArrayList<>(); list.add(1); list.add("zhangsan"); list.add(false); list.add('a'); list.add(0, "lisi"); list.add(1); list.remove(1); list.remove(2); list.set(0, "wangwu"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
Object類定義的equals()方法只有在傳遞給該方法的對(duì)象與調(diào)用該方法的對(duì)象是同一對(duì)象的時(shí)候,才會(huì)返回true??梢酝ㄟ^重寫equals()方法來把具有相同狀態(tài)的兩個(gè)對(duì)象被看做是同一對(duì)象。
2).LinkedList
方法描述
void addFirst在鏈表開頭添加一個(gè)對(duì)象
void addLast在鏈表末尾添加一個(gè)對(duì)象
getFirst()返回鏈表中的第一個(gè)元素
getLast()返回鏈表中的最后一個(gè)元素
removeFirst()刪除鏈表中的第一個(gè)元素
removeLast()刪除鏈表中的最后一個(gè)元素
程序?qū)嵗?div style="height:15px;">
package lei; import java.util.LinkedList; import java.util.List; public class Test2 { public static void main(String[] args) { LinkedList l=new LinkedList<>(); l.add("zhangsan"); l.add("lisi"); l.addFirst(1); l.addLast(4); System.out.println(l.getFirst()); System.out.println(l.getLast()); l.removeFirst(); l.removeLast(); for (int i = 0; i < l.size(); i++) { System.out.println(l.get(i)); } } }
如果列表需要快速存取,但不經(jīng)常進(jìn)行元素的插入和刪除操作,那么選擇ArrayList會(huì)好一些;如果需要對(duì);列表進(jìn)行頻繁的插入和刪除操作,那么就應(yīng)該選擇LinkedList。
1.Set類型容器中不能包含重復(fù)元素。當(dāng)加入一個(gè)元素到容器中時(shí),要比較元素的內(nèi)容是否存在重復(fù)的,所以加入Set類型對(duì)象容器的對(duì)象必須重寫equals()方法。
2.Hashset中不允許出現(xiàn)重復(fù)元素。這里的重復(fù)元素是指有相同的哈希碼,并且用equals()方法進(jìn)行比較時(shí),返回true的兩個(gè)對(duì)象。
如果我們編寫的類重新定義了equals方法,那么這個(gè)類也必須重新定義hashCode()方法,并且保證當(dāng)兩個(gè)對(duì)象用equals方法比較結(jié)果為true時(shí),這兩個(gè)對(duì)象的hashCode()方法的返回值相等。