淺談集合類

淺談:在開發中我們肯定用到過數組,由於數組的長度是不變的,所以有的時候在開發中會造成不必要的麻煩,比如浪費內存資源,有的人說:“在寫代碼的時候,如果數組的內存不夠用,那我們不是可以重新創建一個數組嗎?”確實可以,但是如果你有一百個數組都不能用了,也就是說你要再次創建一百個數組嗎?我很想說這樣的代碼誰會用呢?你要想一想java的存儲機制,每創建一個對象都要存儲在內存裏的,只是對於使用者並不知道而已,這樣頻繁的創建對象,雖然有垃圾回收機制,其次垃圾回收算法的不完備性,早先採用的某些垃圾回收算法就不能保證100%收集到所有的廢棄內存,當然隨着垃圾回收算法的不斷改進以及軟硬件運行效率的不斷提升,這些問題都可以迎刃而解,但是依然會降低代碼的效率,不要認爲數組寫好了就再也不用改了,其實在生活中爲了適應社會,我們的代碼也要跟的上時代,如果一點變化就全部修改,誰會願意呢?更何況就不存在數組太大用不完嗎?比如數組能存100個數,現在只能存10個數,那其他空間不是浪費了嗎?不是說數組沒用,數組是java語言中內置的數據類型,是線性排列的,執行效率或者類型檢查都是最快的,只是長度不變,如果又不知道自己到底需要多大的空間,很容易造成資源浪費,不利於我們開發,相反集合就解決了這個問題,集合的長度是可變的,其實集合就是特殊的數組,當然了既然是特殊的數組,那有什麼特殊的呢?舉例說明

數組的創建和使用:
    public static void main(String[] args) {    
        int p[]=new int[10];
        for(int i=0;i<p.length;i++){
            p[i]=i;
        }
        for(int i=0;i<p.length;i++){
            System.out.print(p[i]);
        }
    }
通過觀察數組只能創建基本類型的數組,也就是隻能存放基本類型的數據,有的人說可以創建類型呀,那我就再舉個例子吧
class Q{
    int number=0;
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Qwer [number=" + number + "]";
    }
}

public class qwer {
    public static void main(String[] args) {    
        Q p[]=new Q[10];
        for(int i=0;i<p.length;i++){
            Q q=new Q();
            q.setNumber(i);
            p[i]=q;
        }
        for(int i=0;i<p.length;i++){
            System.out.print(p[i].getNumber());
        }
    }
}
輸出:0123456789

確實可以創建類型,依然能夠完成操作,但是你能存放其他的類型不?不行了吧,你不要告訴我,我就再創建一個類型吧,那要是類型很多呢?這個時候並不是一個好的選擇,但是集合就是存放對象引用的,而且集合包含很多的方法滿足我們的生活需求。

常用集合的繼承關係
通過上圖我們可以看到都是從Object類繼承過來的,我們就先進入集合的第一部分吧!

  1. Collection接口
    Collection接口的常用方法
    1、add(E e) 將指定的對象添加到集合裏
    2、remove(Object o) 將指定的對象從集合中移除
    3、isEmpty() 判斷當前集合是否爲空,返回boolean類型
    4、iterator() 返回在此Collection的元素上進行迭代的迭代器。
    5、size() 返回當前集合的長度,也就是集合裏元素的個數
public static void main(String [] args){
    Collection<String> list=new ArrayList<String>();
    list.add("1");
    list.add("2");
    list.add("3");
    Iterator<String> iterator=list.iterator();
    while(iterator.hasNext()){
        System.out.print(iterator.next());
    }
    System.out.println();
    list.remove("2");
    Iterator<String> iterator2=list.iterator();
    while(iterator2.hasNext()){
        System.out.print(iterator2.next());
    }

}
輸出:123
    13
  1. list集合
    list接口繼承了Collection,因此包含了collection中的所有的方法,list接口還定義了兩個非常重要的方法
    get(int index):獲得指定索引位置的元素。
    set(int index,Object obj):將集合指定索引位置的對象改爲指定的對象。
    list接口的常用實現類有ArrayList與LinkedList
    經常在開發中用ArrayList,ArrayList類實現了可變的數組,允許保存所有的元素,包括null,並可根據索引位置集合進行快速的隨機訪問:缺點就是插入和刪除比較慢。
    簡單舉例說明list集合的使用
public static void main(String[] args) {    
        List<Integer> list=new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }

很明顯集合的索引也是從0開始的
3. set集合
不能包含重複的對象
4. Map集合
Map接口提供了將key映射到值的對象。一個映射不能包含重複的key,每個key最多隻能映射到一個值,Map接口中同樣提供了集合中常用的方法.
put(K key,V value)向集合中加添指定的key與value的映射關係
containsKey(Object obj) 如果此映射包含指定key的映射關係,則返回true
containsValue(Object value)如果此映射將一個或多個key映射到指定值,則返回true
get(Object obj)如果存在指定的key對象,則返回該對象對應的值,否則則返回null
keySet()返回該集合中的所有key對象形成的Set集合
values()返回該集合中所有值對象形成的Collection集合

public static void main(String[] args) {    
        Map<String, Object> map=new HashMap<String, Object>();
        map.put("1","我是1");
        map.put("2","我是2");

        Set<String> set=map.keySet();
        Iterator<String> iterator = set.iterator(); 
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }

        Collection<Object> collection=map.values();
        Iterator<Object> iterator2 = collection.iterator();

        while(iterator2.hasNext()){
            System.err.println(iterator2.next());
        }   
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章