Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 【為Android打基礎】Java Map集合簡介 排序的集合TreeMap

【為Android打基礎】Java Map集合簡介 排序的集合TreeMap

編輯:關於Android編程

聲明:博主所寫的都是針對剛入行的,從Java開始一步一步帶你走向Android,為你的Android開發之旅慢慢打下堅實的基礎,因為我碰到的問題肯定也是你即將碰到的,學習與前進的道路上,請大牛手下留情

Java中的Map集合簡介

1>Map集合的基本特點 Map集合 該集合存儲鍵值對是一對一對往裡存,而且要保證鍵的唯一性

2>map集合有三個小弟 兩個常見

2.1HashTable

底層是哈希表數據結構不可以存入 null作為鍵,null作為值出現,該集合是線程同步JDK1.0 效率低

2.2HashMap

底層是哈希表數據結構,並允許是null鍵null值,該集合是不同步的JDK 1.2 效率高

2.3TreeMap

底層是二叉樹數據結構,線程不同步,可以用於給Map集合中的鍵進行排序和Set集 合很像,其實Set集合底層使用了Map集合

3>Map集合常用方法

    //創建Map集合  
    Map map = new HashMap();  
      
    //向Map集合中添加元素  
    map.put("01", "lilei");  
    map.put(null,"lili");  
    map.put("02",null);  
      
    // 根據鍵判斷Map集合是否包含某個元素  
    System.out.println(map.containsKey("01"));  
  
    // 根據鍵刪除某個元素  
    System.out.println("remove:" + map.remove("01"));  
  
    // 根據鍵獲取集合中的某個元素  
    System.out.println("get:" + map.get("02"));  
  
    // 獲取集合中的null鍵元素  
    System.out.println(map.get(null));  
  
    // 獲取map集合中所有的值  
    Collection c = map.values();  
    System.out.println(c);  
  
    // 打印集合  
    System.out.println(map); 

4.下面說下Map集合中最重要的兩個方法 一個是keySet 一個是entrySet()

4.1Map集合中的keySet()

keySet將Map中所有的鍵都存入到Set集合中因為Set集合具備迭代器,所有可以迭代當時取出所有的鍵, 在根據 get方法,獲取每一個鍵對應的值Map集合的取出原理,將Map集合轉化成Set集合,在通過迭代器的方式取出

public static void main(String[]args){  
    Map<string, string=""> map = new HashMap<string, string="">();  
  
    map.put("01", "lilei");  
    map.put("02", "hanmei");  
    map.put("03", "lili");  
    map.put("04", "luxi");  
    map.put("05", null);  
    map.put(null, "tom");  
  
    // 取出map集合中的所有的鍵  
    Set set = map.keySet();  
  
    // 通過map集合的迭代器 取出set集合中鍵,通過map的get取出值  
    Iterator it = set.iterator();  
  
    while (it.hasNext()) {  
        //it.next即為map集合中的鍵 這裡根據鍵拿到所有的值  
        System.out.println(map.get(it.next()));  
  
    }  
}

4.2Map集合中entrySet()方法

Set> entrySet:將Map集合中的映射關系存入到set集合中,而這個關系的數據類型就是 Map.EntryMap.Entry 其實Entry也是一個接口 它是map接口中的內部接口

public static void main(String[] args) {  
    Map<hashmapstudent, string=""> map = new HashMap<hashmapstudent, string="">();  
  
        map.put(new HashMapStudent("lilei", 11), "北京");  
        map.put(new HashMapStudent("lilei", 11), "天津");  
        map.put(new HashMapStudent("hanmei", 12), "上海");  
        map.put(new HashMapStudent("lili", 13), "天津");  
        map.put(new HashMapStudent("luxi", 14), "南昌");  
        map.put(new HashMapStudent("tom", 15), "武漢");  
          
        //將Map.entrySet()轉化成Set集合 Set集合中有迭代功能  
        Set<map.entry<hashmapstudent, string="">> entry = map.entrySet();  
  
        Iterator<map.entry<hashmapstudent, string="">> it = entry.iterator();  
  
        while (it.hasNext()) {  
  
            Map.Entry<hashmapstudent, string=""> mapEntry = it.next();  
              
            //獲取map集合中的鍵  
            HashMapStudent key = mapEntry.getKey();  
              
            //獲取map集合中的值  
            String value = mapEntry.getValue();  
  
            System.out  
                    .println(" Key = " + key.toString() + " Value = " + value);  
  
        }  
          
}  
class HashMapStudent {  
  
    private String name;  
  
    private int age;  
  
    public HashMapStudent(String name, int age) {  
  
        this.name = name;  
        this.age = age;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    @Override  
    public String toString() {  
        return "HashMapStudent [name=" + name + ", age=" + age + "]";  
    }  
  
}

5>可排序的Map集合 TreeMap

5.1讓元素具有比較性

按照存入鍵的年齡進行排序,當主要條件年齡相同時按照次要條件姓名進行排序

5.2集合中的鍵為一個實體類 用實體類實現Comparable 接口 並覆蓋接口中的compareTo方法 此方法的返回值為 int類型

public class JavaMap03 {  
  
    public static void main(String[] args) {  
  
        TreeMap<treemapstudent, string=""> map = new TreeMap<treemapstudent, string="">();  
  
        map.put(new TreeMapStudent("tom", 12), "tianjing");  
        map.put(new TreeMapStudent("lilei", 11), "beijing");  
        map.put(new TreeMapStudent("hanmei", 14), "wuhan");  
        map.put(new TreeMapStudent("hanmei", 15), "wuhan");  
        map.put(new TreeMapStudent("lilia", 13), "shanghai");  
        map.put(new TreeMapStudent("lilib", 13), "shanghai");  
  
        Set<map.entry<treemapstudent, string="">> set = map.entrySet();  
  
        Iterator<map.entry<treemapstudent, string="">> it = set.iterator();  
  
        while (it.hasNext()) {  
            Map.Entry<treemapstudent, string=""> mps = it.next();  
  
            TreeMapStudent tree = mps.getKey();  
  
            String str = mps.getValue();  
  
            System.out.println(tree + "..." + str);  
        }  
  
    }  
  
}  
  
class TreeMapStudent implements Comparable {  
  
    private String name;  
  
    private int age;  
  
    public TreeMapStudent(String name, int age) {  
  
        this.name = name;  
        this.age = age;  
    }  
  
    //覆寫Comparable 中的方法  
  
    public int compareTo(TreeMapStudent another) {  
  
        int num = new Integer(this.age).compareTo(new Integer(another.age));  
    //當主要條件年齡相等的時候 此時需要比較次要條件 就是姓名 字符串中自帶compareTo方法  
  
        if (num == 0) {  
            return this.name.compareTo(another.name);  
        }  
        return num;  
    }  
  
    // 覆蓋hashCode方法  
    public int hashCode() {  
  
        return name.hashCode() + age * 37;  
    }  
  
    // 覆蓋equals 方法  
    public boolean equals(Object o) {  
        if (!(o instanceof HashMapStudent)) {  
            throw new ClassCastException("類型不匹配");  
        }  
  
        TreeMapStudent student = (TreeMapStudent) o;  
  
        return this.name.equals(student.name) && this.age == student.age;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    @Override  
    public String toString() {  
        return "HashMapStudent [name=" + name + ", age=" + age + "]";  
    }  
  
}

[name=lilei, age=11]...beijing
[name=tom, age=12]...tianjing
[name=lilia, age=13]...shanghai
[name=lilib, age=13]...shanghai
[name=hanmei, age=14]...wuhan
[name=hanmei, age=15]...wuhan

證明集合是按照類HashMapStudent 類中的年齡進行排序的 當主要條件年齡相同時會按照次要條件姓名進行排序

4.3讓集合自身具有比較性

4.4寫一個類StudentComparator 實現Comparator 並將要比較的條件傳入,當集合初始化時,將StudentComparator 作為參數傳入

public class JavaMap03 {  
  
    public static void main(String[] args) {  
  
        TreeMap<treemapstudent, string=""> map = new TreeMap<treemapstudent, string="">(new StudentComparator() );  
  
        map.put(new TreeMapStudent("tom", 12), "tianjing");  
        map.put(new TreeMapStudent("lilei", 11), "beijing");  
        map.put(new TreeMapStudent("hanmei", 14), "wuhan");  
        map.put(new TreeMapStudent("hanmei", 15), "wuhan");  
        map.put(new TreeMapStudent("lilia", 13), "shanghai");  
        map.put(new TreeMapStudent("lilib", 13), "shanghai");  
  
        Set<map.entry<treemapstudent, string="">> set = map.entrySet();  
  
        Iterator<map.entry<treemapstudent, string="">> it = set.iterator();  
  
        while (it.hasNext()) {  
            Map.Entry<treemapstudent, string=""> mps = it.next();  
  
            TreeMapStudent tms = mps.getKey();  
  
            String str = mps.getValue();  
  
            System.out.println(tms + "..." + str);  
        }  
  
    }  
  
}  
  
class StudentComparator implements Comparator {  
  
    @Override  
    public int compare(TreeMapStudent lhs, TreeMapStudent rhs) {  
  
        int num = lhs.getName().compareTo(rhs.getName());  
  
        if (num == 0) {  
  
            return new Integer(lhs.getAge())  
                    .compareTo(new Integer(rhs.getAge()));  
  
        }  
        return num;  
    }  
  
}  
  
class TreeMapStudent  {  
  
    private String name;  
  
    private int age;  
  
    public TreeMapStudent(String name, int age) {  
  
        this.name = name;  
        this.age = age;  
    }  
  
    @Override  
    public int compareTo(TreeMapStudent another) {  
  
        int num = new Integer(this.age).compareTo(new Integer(another.age));  
  
        if (num == 0) {  
            return this.name.compareTo(another.name);  
        }  
        return num;  
    }  
  
      
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    @Override  
    public String toString() {  
        return "HashMapStudent [name=" + name + ", age=" + age + "]";  
    }  
  
}
打印結果為:

[name=hanmei, age=14]...wuhan
[name=hanmei, age=15]...wuhan
[name=lilei, age=11]...beijing
[name=lilia, age=13]...shanghai
[name=lilib, age=13]...shanghai
[name=tom, age=12]...tianjing

證明集合是按照姓名進行排序的

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved