java第六周周報

前言

本周是學習java的第六周,把容器大部分內(nèi)容學完了。

參考教程:

W3Cschool

本周學習要點:

1.Map中的HashMapTreeMap區(qū)別不大,效率上使用HashMap,需要用到排序時使用TreeMap

2.TreeMap是典型的紅黑二叉樹的實現(xiàn)。

3.TreeMap會按照key遞增的方式排序,在使用自己定義的類時需要實現(xiàn)comparable接口并重寫CompareTo方法。

4.HashMapHashTable:前者線程不安全,效率高,允許key或value為null;后者線程安全效率低,不運行key或value為null。

5.HashSet是set的實現(xiàn)類,set內(nèi)的元素沒有順序且不可重復,使用add方法加入重復的元素則會加入失敗,其底層由HashMap實現(xiàn)。

6.TreeSet底層用TreeMap實現(xiàn),同樣的需要實現(xiàn)compareable接口

7.collection是一個接口,collections是一個包裝類。

實現(xiàn)comparable接口并重寫CompareTo方法

class Emp implements Comparable<Emp>{
    int id;
    String name;
    double salary;
    public Emp(int id, String name, double salary) {
        super();
        this.id = id;
        this.name = name;
        this.salary = salary;
    }
    @Override
    public int compareTo(Emp o) {
        if(this.salary>o.salary){
            return 1;
        }else if (this.salary<o.salary) {
            return -1;
        }else {
            if(this.id>o.id){
                return 1;
            }
            else if (this.id<o.id) {
                return -1;
            }else {
                return 0;
            }
        }
    }
}

對于這個重寫的方法,規(guī)定了自定義的比較后的返回值。大于時返回1,小于時返回-1,等于時返回0。在這里我比較了salary,當salary出現(xiàn)相等的情況時則比較id,若id出現(xiàn)相等的情況時則返回0,即表示相等,當然了,還可以繼續(xù)延展下去,如id相等時在嵌套if,elseif語句來比較name是否相等。

遍歷容器的方式

一般的有四種:
1.for循環(huán)
2.增強for循環(huán)(foreach)
3.for循環(huán)+迭代器
4.while循環(huán)+迭代器

迭代器遍歷容器元素

迭代器是一種設計模式,它是一個對象,它可以遍歷并選擇序列中的對象,而開發(fā)人員不需要了解該序列的底層結構。迭代器通常被稱為“輕量級”對象,因為創(chuàng)建它的代價小。

Java中的Iterator功能比較簡單,并且只能單向移動:

(1) 使用方法iterator()要求容器返回一個Iterator。第一次調(diào)用Iterator的next()方法時,它返回序列的第一個元素。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。

(2) 使用next()獲得序列中的下一個元素。

(3) 使用hasNext()檢查序列中是否還有元素。

(4) 使用remove()將迭代器新返回的元素刪除。

Iterator是Java迭代器最簡單的實現(xiàn),為List設計的ListIterator具有更多的功能,它可以從兩個方向遍歷List,也可以從List中插入和刪除元素。
遍歷list:

    public static void testIteratorList() {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        
        for(Iterator<String> iter=list.iterator();iter.hasNext();){
            String temp = iter.next();
            System.out.println(temp);
        }
    }

遍歷set:

    public static void testIteratorSet() {
        Set<String> set = new HashSet<>();
        set.add("aa");
        set.add("bb");
        
        for(Iterator<String> iter=set.iterator();iter.hasNext();){
            String temp = iter.next();
            System.out.println(temp);
        }
    }

遍歷map:

    public static void testIteratorMap() {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "aa");
        map.put(2, "ss");
        
        //第一種方式
        Set<Entry<Integer, String>> ss = map.entrySet();
        for(Iterator<Entry<Integer,String>> iter=ss.iterator();iter.hasNext();){
            Entry<Integer,String> temp=iter.next();
            System.out.println(temp.getKey()+"--"+temp.getValue());
        }
        //第二種方式
        Set<Integer> keySet = map.keySet();
        for(Iterator<Integer> iter=keySet.iterator();iter.hasNext();){
            Integer key = iter.next();
            System.out.println(key+"--"+map.get(key));
        }
    }
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結構如棧,隊列等,Java集合還可以用于保存具有映射關...
    小徐andorid閱讀 2,100評論 0 13
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 969評論 0 1
  • 四、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列,叫字符串。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 879評論 0 2
  • 集合類框架的介紹: ![Java 集合類框架](https://upload-images.jianshu.io/...
    LynnGuo閱讀 805評論 0 1
  • 在編程中,常常需要集中存放多個數(shù)據(jù)。集合類主要負責保存、盛裝其他數(shù)據(jù),因此集合類也被稱為容器類。所有的集合類都位于...
    一一一二二三閱讀 493評論 0 1

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