概念:集合類主要負(fù)責(zé)保存、封裝其他數(shù)據(jù),因此集合類也被稱為容器類。
1.儲(chǔ)存對(duì)象可以考慮:1數(shù)組2集合。
2.數(shù)組儲(chǔ)存對(duì)象的特點(diǎn)。student[] stu=new student [20];
>>弊端1.一旦創(chuàng)建,其長(zhǎng)度不變。2.真實(shí)的數(shù)組存放的對(duì)象的個(gè)數(shù)是不可知的。
3.集合:分為collection和map兩種體系
注意:
①、集合只能存放對(duì)象。比如你存一個(gè) int 型數(shù)據(jù) 1放入集合中,其實(shí)它是自動(dòng)轉(zhuǎn)換成 Integer 類后存入的,Java中每一種基本類型都有對(duì)應(yīng)的引用類型。
②、集合存放的是多個(gè)對(duì)象的引用,對(duì)象本身還是放在堆內(nèi)存中。
③、集合可以存放不同類型,不限數(shù)量的數(shù)據(jù)類型。
Collection接口:
List接口:存儲(chǔ)元素?zé)o序、不可重復(fù)的集合 ---類似高中的“集合”
---ArrayList(主要的實(shí)現(xiàn)類),LinkedList,vector
Set接口:存儲(chǔ)元素有序,可重復(fù)的集合 ---”動(dòng)態(tài)”數(shù)組(無(wú)序性!=隨機(jī)性)
----HashSet,LinkedHashSet,TreeSet
Collection使用的例子:
添加元素:collection.add("");
刪除指定元素:collection.remove("");
刪除所有元素(collection.clear): Collection c = new ArrayList(); c.add("Bob"); collection.removeAll(c);
判斷是否為空:collection.isEmrty();
判斷集合中的元素是否完全相同:equals(Object obj)
利用增強(qiáng)for循環(huán)遍歷集合: for(Object obj : collection){ System.out.println(obj); }
利用迭代器:Iterator: Iterator iterator = collection.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
}
1.Iterator:迭代器,它是Java集合的頂層接口(不包括 map 系列的集合,Map接口 是 map 系列集合的頂層接口)
Object next():返回迭代器剛越過(guò)的元素的引用,返回值是 Object,需要強(qiáng)制轉(zhuǎn)換成自己需要的類型
boolean hasNext():判斷容器內(nèi)是否還有可供訪問(wèn)的元素
void remove():刪除迭代器剛越過(guò)的元素
//產(chǎn)生一個(gè) List 集合,典型實(shí)現(xiàn)為 ArrayList。
List list = new ArrayList();
//添加三個(gè)元素
list.add("Tom");
list.add("Bob");
list.add("Marry");
//構(gòu)造 List 的迭代器
Iterator it = list.iterator();
//通過(guò)迭代器遍歷元素
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
2.ArrayList,List主要的實(shí)現(xiàn)類:
LIst常用方法:void add(int index, Object ele) :在指定的索引index為只添加元素ele(插)
Object get(int index) 獲取指定的元素(查)
int indexOf(Object obj) :返回obj在集合中首次出現(xiàn)的位置,沒(méi)有的話返回-1,(獲得指定對(duì)象的索引)
int lastIndexOf(Object obj) :返回obj在集合中最后一次出現(xiàn)的位置,沒(méi)有的話返回-1,
Object remove(int index) 刪除指定索引位置的元素(刪)
Object set(int index, Object ele) 設(shè)置指定索引位置的元素(改)
List subList(int fromIndex, int toIndex)返回從fromIndex到toindex結(jié)束的一個(gè)list
public void text(){
List list=new ArrayList();
list.add(121);
list.add(122);
list.add(new String("AA"));
list.add(0,444);
System.out.println(list);//輸出:444 121 122 AA
Object obj=list.get(1);
System.out.println(obj);//輸出的是第二個(gè)元素:121
list.set(2, 1);
System.out.println(list);//輸出:444 121 1 AA
int i=list.indexOf(1);
System.out.println("索引為:"+i);//輸出:2
System.out.println(list.indexof(126))//輸出-1
System.out.println(list.subList(0,3));//輸出444, 121, 1
}
3.HashSet,Set主要的實(shí)現(xiàn)類:(Set接口是Collection的子接口,set接口沒(méi)有提供額外的方法)
特點(diǎn):不能保證元素的順序;不可重復(fù);不是線程安全的;集合元素可以為 NULL;
Set hashSet = new HashSet();
//類A的equals方法總是返回true,但沒(méi)有重寫(xiě)其hashCode()方法。不能保證當(dāng)前對(duì)象是HashSet中的唯一對(duì)象
class A
{
public boolean equals(Object obj)
{
return true;
}
}
//類B的hashCode()方法總是返回1,但沒(méi)有重寫(xiě)其equals()方法。不能保證當(dāng)前對(duì)象是HashSet中的唯一對(duì)象
class B
{
public int hashCode()
{
return 1;
}
}
//類C的hashCode()方法總是返回2,且有重寫(xiě)其equals()方法
class C
{
public int hashCode()
{
return 2;
}
public boolean equals(Object obj)
{
return true;
}
}
public class HashSetTest
{
public static void main(String[] args)
{
HashSet books = new HashSet();
//分別向books集合中添加兩個(gè)A對(duì)象,兩個(gè)B對(duì)象,兩個(gè)C對(duì)象
books.add(new A());
books.add(new A());
books.add(new B());
books.add(new B());
books.add(new C());
books.add(new C());
System.out.println(books);
}
}
Map接口:存儲(chǔ)“鍵-值”對(duì)的數(shù)據(jù);
1.具有映射關(guān)系“key-value對(duì)”的集合 ---類似于高中的“函數(shù)” y = f(x) (x1,y1) (x2,y2)。key相當(dāng)于變量value相當(dāng)于因變量。嚴(yán)格來(lái)說(shuō) Map 并不是一個(gè)集合,而是兩個(gè)集合之間 的映射關(guān)系。
2.因?yàn)?Map 集合即沒(méi)有實(shí)現(xiàn)于 Collection 接口,也沒(méi)有實(shí)現(xiàn) Iterable 接口,所以不能對(duì) Map 集合進(jìn)行 for-each 遍歷。
Map遍歷:
Map<String,Object> hashMap = new HashMap<>();
//添加元素到 Map 中
hashMap.put("key1", "value1");
hashMap.put("key2", "value2");
hashMap.put("key3", "value3");
hashMap.put("key4", "value4");
hashMap.put("key5", "value5");
//刪除 Map 中的元素,通過(guò) key 的值
hashMap.remove("key1");
//通過(guò) get(key) 得到 Map 中的value
Object str1 = hashMap.get("key1");
//可以通過(guò) 添加 方法來(lái)修改 Map 中的元素
hashMap.put("key2", "修改 key2 的 Value");
//通過(guò) map.values() 方法得到 Map 中的 value 集合
Collection<Object> value = hashMap.values();
for(Object obj : value){
//System.out.println(obj);
}
//通過(guò) map.keySet() 得到 Map 的key 的集合,然后 通過(guò) get(key) 得到 Value
Set<String> set = hashMap.keySet();
for(String str : set){
Object obj = hashMap.get(str);
//System.out.println(str+"="+obj);
}
//通過(guò) Map.entrySet() 得到 Map 的 Entry集合,然后遍歷
Set<Map.Entry<String, Object>> entrys = hashMap.entrySet();
for(Map.Entry<String, Object> entry: entrys){
String key = entry.getKey();
Object value2 = entry.getValue();
System.out.println(key+"="+value2);
}
System.out.println(hashMap);
作者:
黑馬程序員JavaEE培訓(xùn)學(xué)院首發(fā):
http://java.itheima.com/?v2