java集合框架(二)其它集合

1、LinkedList鏈表

序列分先進先出FIFO,先進后出FILO
FIFO在Java中又叫Queue 隊列
FILO在Java中又叫Stack 棧

  • (1) LinkedList 與 List接口
    ArrayList一樣,LinkedList也實現(xiàn)了List接口,諸如add,remove,contains等等方法。 詳細使用,請參考 ArrayList 常用方法

接下來是LinkedList的一些特別的地方

  • (2)雙向鏈表 Deque
    除了實現(xiàn)了List接口外,LinkedList還實現(xiàn)了雙向鏈表結(jié)構(gòu)Deque,可以很方便的在頭尾插入刪除數(shù)據(jù)
    public static void Deque(){
        //LinkedList是一個雙向鏈表結(jié)構(gòu)的list
        LinkedList<Hero> linkedList = new LinkedList<>();
        linkedList.add(new Hero("hero1"));
        linkedList.addLast(new Hero("hero2"));
        linkedList.add(new Hero("hero3"));
        System.out.println(linkedList);
        linkedList.addFirst(new Hero("hero0"));
        System.out.println(linkedList);
        System.out.println(linkedList.getFirst());
        System.out.println(linkedList.getLast());
        System.out.println(linkedList.removeFirst());
        System.out.println(linkedList.removeLast());
        System.out.println(linkedList);
    }
  • (3)隊列 Queue

LinkedList 除了實現(xiàn)了List和Deque外,還實現(xiàn)了Queue接口(隊列)。
Queue是先進先出隊列 FIFO,常用方法:
offer 在最后添加元素
poll 取出第一個元素
peek 查看第一個元素

    public static void Quene(){
        LinkedList linkedList = new LinkedList<Hero>();
        Queue<Hero> q = new LinkedList<Hero>();
        q.offer(new Hero("Hero1"));
        q.offer(new Hero("Hero2"));
        q.offer(new Hero("Hero3"));
        q.offer(new Hero("Hero4"));
        System.out.println(q);
        //取出第一個Hero,F(xiàn)IFO 先進先出
        Hero h = q.poll();
        System.out.println(q);
        System.out.println(h);
        //把第一個拿出來看一看,但是不取出來
        h = q.peek();
        System.out.println(q);
        System.out.println(h);
    }

2、二叉樹

  • (1)二叉樹概念

二叉樹由各種節(jié)點組成
二叉樹特點:
每個節(jié)點都可以有左子節(jié)點,右子節(jié)點
每一個節(jié)點都有一個值

public class Node {
    // 左子節(jié)點
    public Node leftNode;
    // 右子節(jié)點
    public Node rightNode;
    // 值
    public Object value;
}
  • (2)二叉樹排序 插入和遍歷
public class Node {
    public Node leftNode;
    public Node rightNode;
    public Object value;

    public void add(Object v){
         if(null == value)
             value = v;
         else {
             if((Integer)v-(Integer)value <= 0){
                 if(null == leftNode)
                     leftNode = new Node();
                 leftNode.add(v);
             }
             else {
                 if (null == rightNode)
                     rightNode = new Node();
                 rightNode.add(v);
             }
         }
    }
    public List<Object> values(){
        List<Object>values = new ArrayList<>();
        if(null != leftNode)
            values.addAll(leftNode.values());
        values.add(value);
        if(null != rightNode)
            values.addAll(rightNode.values());
        return values;
    }

    public static void main(String[] args) {
        int randoms[] = new int[]{67, 7, 30, 73, 10, 0, 78, 81, 10, 74 };
        Node roots = new Node();
        for(int number: randoms){
            roots.add(number);
        }
        System.out.println(roots.values());
    }
}

3、HashMap

HashMap儲存數(shù)據(jù)的方式是—— 鍵值對

對于HashMap而言,key是唯一的,不可以重復的。
所以,以相同的key 把不同的value插入到 Map中會導致舊元素被覆蓋,只留下最后插入的元素。
不過,同一個對象可以作為值插入到map中,只要對應(yīng)的key不一樣

public class HashMapTest
{
    public static void main(String[] args) {
        HashMap<String,String> dict = new HashMap<>();
        dict.put("abc" ,"物理英雄");
        dict.put("apc","魔法英雄");
        dict.put("t", "坦克");
        System.out.println(dict.get("t"));
    }
}

4、HashSet

Set中的元素,不能重復
Set中的元素,沒有順序。
嚴格的說,是沒有按照元素的插入順序排列

public class TestCollection {
    public static void main(String[] args) {
        HashSet<String> names = new HashSet<String>();
        names.add("gareen");
        System.out.println(names);
        //第二次插入同樣的數(shù)據(jù),是插不進去的,容器中只會保留一個
        names.add("gareen");
        System.out.println(names);
    }
}
  • Set不提供get()來獲取指定位置的元素
    所以遍歷需要用到迭代器,或者增強型for循環(huán)
 //遍歷Set可以采用迭代器iterator
        for (Iterator<Integer> iterator = numbers.iterator(); iterator.hasNext();) {
            Integer i = (Integer) iterator.next();
            System.out.println(i);
        }
         
        //或者采用增強型for循環(huán)
        for (Integer i : numbers) {
            System.out.println(i);
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容