首頁(yè)技術(shù)文章正文

java學(xué)習(xí)筆記之java集合

更新時(shí)間:2018-09-06 來(lái)源:黑馬程序員技術(shù)社區(qū) 瀏覽量:

概念:集合類(lèi)主要負(fù)責(zé)保存、封裝其他數(shù)據(jù),因此集合類(lèi)也被稱為容器類(lèi)。

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 類(lèi)后存入的,Java中每一種基本類(lèi)型都有對(duì)應(yīng)的引用類(lèi)型。

②、集合存放的是多個(gè)對(duì)象的引用,對(duì)象本身還是放在堆內(nèi)存中。

③、集合可以存放不同類(lèi)型,不限數(shù)量的數(shù)據(jù)類(lèi)型。

Collection接口:

List接口:存儲(chǔ)元素?zé)o序、不可重復(fù)的集合 ---類(lèi)似高中的“集合”

              ---ArrayList(主要的實(shí)現(xiàn)類(lèi)),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)換成自己需要的類(lèi)型

                    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)類(lèi):

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)類(lèi):(Set接口是Collection的子接口,set接口沒(méi)有提供額外的方法)

特點(diǎn):不能保證元素的順序;不可重復(fù);不是線程安全的;集合元素可以為 NULL;

Set hashSet = new HashSet();











//類(lèi)A的equals方法總是返回true,但沒(méi)有重寫(xiě)其hashCode()方法。不能保證當(dāng)前對(duì)象是HashSet中的唯一對(duì)象



class A



{



    public boolean equals(Object obj)



    {



        return true;



    }



}







//類(lèi)B的hashCode()方法總是返回1,但沒(méi)有重寫(xiě)其equals()方法。不能保證當(dāng)前對(duì)象是HashSet中的唯一對(duì)象



class B



{



    public int hashCode()



    {



        return 1;



    }



}







//類(lèi)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ì)”的集合 ---類(lèi)似于高中的“函數(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 
分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!