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

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

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

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

1.儲存對象可以考慮:1數(shù)組2集合。

2.數(shù)組儲存對象的特點。student[] stu=new student [20];

   >>弊端1.一旦創(chuàng)建,其長度不變。2.真實的數(shù)組存放的對象的個數(shù)是不可知的。

3.集合:分為collection和map兩種體系

注意:

①、集合只能存放對象。比如你存一個 int 型數(shù)據(jù) 1放入集合中,其實它是自動轉(zhuǎn)換成 Integer 類后存入的,Java中每一種基本類型都有對應(yīng)的引用類型。

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

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

Collection接口:

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

              ---ArrayList(主要的實現(xiàn)類),LinkedList,vector

Set接口:存儲元素有序,可重復(fù)的集合  ---”動態(tài)”數(shù)組(無序性!=隨機性)

              ----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)

利用增強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():返回迭代器剛越過的元素的引用,返回值是 Object,需要強制轉(zhuǎn)換成自己需要的類型

                    boolean hasNext():判斷容器內(nèi)是否還有可供訪問的元素

                    void remove():刪除迭代器剛越過的元素



//產(chǎn)生一個 List 集合,典型實現(xiàn)為 ArrayList。



         List list = new ArrayList();



         //添加三個元素



         list.add("Tom");



         list.add("Bob");



         list.add("Marry");



          //構(gòu)造 List 的迭代器



         Iterator it = list.iterator();



         //通過迭代器遍歷元素



         while(it.hasNext()){



             Object obj = it.next();



             System.out.println(obj);



        }


2.ArrayList,List主要的實現(xiàn)類:

LIst常用方法:void add(int index, Object ele) :在指定的索引index為只添加元素ele(插)

Object get(int index) 獲取指定的元素(查)

int indexOf(Object obj) :返回obj在集合中首次出現(xiàn)的位置,沒有的話返回-1,(獲得指定對象的索引)

int lastIndexOf(Object obj) :返回obj在集合中最后一次出現(xiàn)的位置,沒有的話返回-1,

Object remove(int index) 刪除指定索引位置的元素(刪)

Object set(int index, Object ele) 設(shè)置指定索引位置的元素(改)

List subList(int fromIndex, int toIndex)返回從fromIndex到toindex結(jié)束的一個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);//輸出的是第二個元素: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主要的實現(xiàn)類:(Set接口是Collection的子接口,set接口沒有提供額外的方法)

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

Set hashSet = new HashSet();











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



class A



{



    public boolean equals(Object obj)



    {



        return true;



    }



}







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



class B



{



    public int hashCode()



    {



        return 1;



    }



}







//類C的hashCode()方法總是返回2,且有重寫其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集合中添加兩個A對象,兩個B對象,兩個C對象



        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接口:存儲“鍵-值”對的數(shù)據(jù);

1.具有映射關(guān)系“key-value對”的集合 ---類似于高中的“函數(shù)” y = f(x)   (x1,y1) (x2,y2)。key相當(dāng)于變量value相當(dāng)于因變量。嚴(yán)格來說 Map 并不是一個集合,而是兩個集合之間 的映射關(guān)系。

2.因為 Map 集合即沒有實現(xiàn)于 Collection 接口,也沒有實現(xiàn) Iterable 接口,所以不能對 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 中的元素,通過 key 的值



        hashMap.remove("key1");







        //通過 get(key) 得到 Map 中的value



        Object str1 = hashMap.get("key1");







        //可以通過 添加 方法來修改 Map 中的元素



        hashMap.put("key2", "修改 key2 的 Value");







        //通過 map.values() 方法得到 Map 中的 value 集合



        Collection<Object> value = hashMap.values();



        for(Object obj : value){



            //System.out.println(obj);



        }







        //通過 map.keySet() 得到 Map 的key 的集合,然后 通過 get(key) 得到 Value



        Set<String> set = hashMap.keySet();



        for(String str : set){



            Object obj = hashMap.get(str);



            //System.out.println(str+"="+obj);



        }







        //通過 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 
分享到:
在線咨詢 我要報名
和我們在線交談!