日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

第十一章 混亂不堪的容器類基礎(chǔ)

 印度阿三17 2019-08-24

哇,這一章真的是好混亂啊。

首先,要弄明白這些類的層次關(guān)系,層次關(guān)系錯綜復(fù)雜,只要知道主要的就好,去看jdk文檔趴。

這一章的目的主要熟悉各種接口,為后面的內(nèi)容做鋪墊。

一、Collection接口

Collection接口是List、Queue、Set接口的基類。他們分別有不同的抽象類實現(xiàn),AbstracCollection類是AbstractList類、AbstractQueue類、AbstractSet類的基類。

一、List

?

?共同特點:按照被插入的順序保存元素

1.ArrayList

特點:①由數(shù)組實現(xiàn)擅長于隨機(jī)訪問,但是插入刪除元素較慢

?

(1)列表初始化方法:

每個Collection類型的類都有默認(rèn)構(gòu)造函數(shù)和參數(shù)為Collection的構(gòu)造函數(shù)兩種

?

import java.util.*;
//初始化列表的三種方式
public class AddingGroups {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Integer> l = new ArrayList<Integer>();
        Integer[] moreInts = {6,7,8,9,10};
        //第一種使用Collections類提供的靜態(tài)方法是首選的方式
        Collections.addAll(l, 1,2,3,4,5);
        Collections.addAll(l, moreInts);
        System.out.println("第一種方式Collections.addAll():"   l);
        //第二種使用Arrays類的asList()方法,此方法由數(shù)組實現(xiàn)返回一個固定大小列表,不可增改
        //因此常包裝在容器中使用
        ArrayList<Integer> l1 = new ArrayList<Integer>(Arrays.<Integer>asList(11,12,13,14,15));
        System.out.println("第二方式Arrays.asList():"   l1);
        //第三種方式容器自身的方法
        l.addAll(l);
        System.out.println("第三種方式:"   l);
    }

}
View Code

?

輸出:

第一種方式Collections.addAll():[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
第二方式Arrays.asList():[11, 12, 13, 14, 15]
第三種方式:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

?

(2)ArrayList方法舉例

Pet類對象都被定義為唯一的,任何兩個Pet對象equals()的結(jié)果都是false,在equals()方法中可以定義判斷兩個對象相等的標(biāo)準(zhǔn)。

判斷一個元素是否屬于List,返回元素索引,刪除元素等操作都會用到equals()方法,所以這些隨著equals()方法實現(xiàn)的不同,便會有不同的效果。

?

import java.util.*;
import typeinfo.pets.*;

//ArrayList方法應(yīng)用舉例
public class ArrayListMethod2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Pet> l = Pets.arrayList(10);
        Rat r = new Rat();
        System.out.println("[1]: "   l);
        
        //在數(shù)組列表末尾增加一個對象
        l.add(r);
        System.out.println("[2]: "   l);
        
        //在2位置插入一個對象
        l.add(2, new Pug());
        System.out.println("[3]: "   l);
        
        //刪除對象r
        l.remove(r);
        System.out.println("[4]: "   l);
        
        //刪除位置2處的元素
        l.remove(2);
        System.out.println("[5]: "   l);
        
        //清空列表
        l.clear();
        System.out.println("[6]: "   l);
        
        //將列表l1中元素加入到l中
        ArrayList<Pet> l1 = Pets.arrayList(7);
        l.addAll(l1);
        System.out.println("[7]: "   l);
        
        //在l列表3位置插入l
        l.addAll(3, l);
        System.out.println("[8]: "   l);
        
        //打印列表大小
        System.out.println("[9]: size "   l.size());
        
        //修改列表元素
        l.clear();
        l.addAll(l1);
        l.set(0, new Manx());
        System.out.println("[10]: "   l);
        
        //查看列表是否為空
        System.out.println("[11]: isEmpty "   l.isEmpty());
        
        //根據(jù)索引返回元素
        Pet p = l.get(2);
        System.out.println("[12]: "   p);
        
        //獲得元素索引
        System.out.println("[13]: indexOf "   l.indexOf(p));
        
        //判斷是否包含
        System.out.println("[14]: "   l.contains(p));
        
        //返回一個含有列表所有元素的數(shù)組
        Object[] o = l.toArray();
        System.out.println("[15]: "   o[3]);
    }

}
View Code

?

2.LinkedList

特點:①由鏈表實現(xiàn)善于增刪數(shù)據(jù)

  ?、趯崿F(xiàn)了棧、隊列、雙端隊列的方法,可直接作為棧、隊列、雙端隊列使用

?

實例一:Stack的基本用法

?

import typeinfo.pets.*;
import java.util.*;

public class StackLinkedList {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList<Pet> stack = new LinkedList<Pet>(Pets.arrayList(6));
        System.out.println("[1]: "   stack);
        Rat r = new Rat();
        stack.push(r);
        System.out.println("[2]: "   stack);
        stack.pop();
        stack.pop();
        System.out.println("[3]: "   stack);
    }

}

?

結(jié)果:

?

實例二:Queue的基本用法

?

public class QueueLinkedList {
    
    public static void printQ(Queue q) {
        while(q.peek() != null) {
            System.out.print(q.remove()   " ");
        }
        System.out.println();
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random rand = new Random();
        Queue<Integer> queue = new LinkedList<Integer>();
        for(int i = 0; i < 8; i  ) {
            queue.offer(rand.nextInt(i   10));
        }
        printQ(queue);
        
        Queue<Character> qc = new LinkedList<Character>();
        for(Character c : "haohao".toCharArray()) {
            qc.offer(c);
        }
        printQ(qc);
    }

}
View Code

?輸出:

?2 9 6 6 11 13 12 11
?h a o h a o

?

實例三:PriorityQueue的基本用法

?按照Integer、Character、String的內(nèi)建自然順序排序

import java.util.*;
public class PriorityQueueList {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
        Random rand = new Random();
        for(int i = 0; i < 10; i  ) {
            pq.offer(rand.nextInt(i   10));
        }
        QueueLinkedList.printQ(pq);
        
        List<Integer> l = Arrays.asList(2,4,3,1,5,10);
        pq = new PriorityQueue<Integer>(l);
        QueueLinkedList.printQ(pq);
        
        PriorityQueue<Integer> pq1 = new PriorityQueue<Integer>(10, Collections.reverseOrder());
        pq1.addAll(l);
        QueueLinkedList.printQ(pq1);
    }

}
View Code

?

二、Set

?共同特點:①不保存重復(fù)元素

     ②善于查找,基于對象值

1.HashSet

?特點:①基于Hash表散列函數(shù)實現(xiàn),存儲元素?zé)o序

   ②專門對快速查找進(jìn)行了優(yōu)化

?

2.LinkedHashSet

?特點:①基于Hash表散列函數(shù)實現(xiàn),看起來卻像使用鏈表維護(hù)

  ?、谑荋ashSet的子類

3.TreeSet

?特點:①基于紅黑樹實現(xiàn),會對存儲元素進(jìn)行排序

?

import java.util.*;

public class SetMethod {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Set<Integer> s = new HashSet<Integer>(Arrays.asList(3,1,2,5,6,7,4));
        System.out.println("[1]: "   s);
        s.add(8);
        System.out.println("[2]: "   s);
        Set<Integer> s1 = new HashSet<Integer>(Arrays.asList(5,4,3,2,1));
        System.out.println("[3]: "   s1);
        System.out.println("[4]: "   s.containsAll(s1));
        System.out.println("[5]: "   Arrays.asList(3,1,2,5,6,7,4));
    }

}
View Code

?

?結(jié)果:

?

?這個結(jié)果咋是有序的嘞,正所謂“懸之又懸,妙不可言”,有點復(fù)雜 哈哈 以后再說。

三、Map

?Map和Set情況差不多,不過Map四基于鍵值對的

實例:

?

import java.util.*;
import typeinfo.pets.*;

public class MapBase {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String, Pet> m = new HashMap<String, Pet>();
        m.put("My Rat", new Rat("honghong"));
        m.put("My ManX", new Manx());
        m.put("My Pug", new Pug());
        System.out.println(m);
        Pet p = m.get("My Rat");
        System.out.println(p);
        System.out.println(m.containsKey("My Pug"));
        System.out.println(m.containsValue(p));
    }

}
View Code

?

結(jié)果:

來源:https://www./content-4-405951.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多