• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

Android

java底层简介Map下

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0826/617.html

 
 
--Map接口简介
  本日常州游戏开发培训来看一看map鸠合,map映射接口,用于存放键值对,<key,value>,通过key来查找value,望文生义key不行为空,唯独且不重复,否则底层怎么查呢!
 
  可以从图中看出Map为独自的接口,他和Collection有甚么差别呢?
 
Map和Collection在鸠合中并列存在。 
Map鸠合是双列的,键值对,而Collection是单列鸠合
Map存储元素运用put方式,Collection运用Put方式。
Map遍历没有干脆取出元素的方式,而是先转成Set鸠合,再通过迭代获取元素。
 --Map常用方式
  
--Map运用
增加:运用HashMap。立了手机App外包学生姓名和年纪之间的映射关系。并试图增加重复的键
复制代码
   public static void main(String[] args) {        // 定义一个Map的容器工具  
        Map<String, Integer > map1 = new HashMap<String, Integer >();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);      // map1.put("jack", 30); 在没有hashCode和equals方式   增加重复的键值(值差别),会笼盖掉前方key值相像的值        System.out.println(map1);  
      
        Map<String, Integer> map2 = new HashMap<String, Integer>();  
        map2.put("张三丰", 100);  
        map2.put("虚竹", 20);  
        System.out.println("map2:" + map2);  
        // 从指定映射中将全部映射关系复制到此映射中。          map1.putAll(map2);  
        System.out.println("map1:" + map1);  
    }  
复制代码
删除:
复制代码
   public static void main(String[] args) {   
   // 删除:  
        // remove() 删除相关工具,指定key工具  
        // clear() 清空鸠合工具    
        Map<String, Integer> map1 = new HashMap<String, Integer>();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);  
        System.out.println(map1);                 
        // 指定key,回笼删除的键值对映射的值。  
        map1.remove("java");
        System.out.println(map1);  
        map1.clear();  
        System.out.println("map1:" + map1);  
    }  
复制代码
获取:
 
复制代码
public static void main(String[] args) {     // 获取:  
        // V get(Object key) 通过指定的key工具获取value工具  
        // int size() 获取容器的大小  
        Map<String, Integer> map1 = new HashMap<String, Integer>();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);  
        System.out.println(map1);  
        // V get(Object key) 通过指定的key工具获取value工具  
        System.out.println("value:" + map1.get("jack"));  
        // int size() 获取容器的大小
        System.out.println("map.size:" + map1.size()); 
    } 
复制代码
App开发培训校验:
复制代码
public static void main(String[] args) {        // 校验:  
        // boolean isEmpty() 校验鸠合是否为空   长度为0回笼true否则false  
        // boolean containsKey(Object key) 校验鸠合中是否包括指定的key  
        // boolean containsValue(Object value)    
        Map<String, Integer> map1 = new HashMap<String, Integer>();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);  
        System.out.println(map1);  
        System.out.println("isEmpty:" + map1.isEmpty());  
        System.out.println("containskey:" + map1.containsKey("jack"));  
        System.out.println("containsvalues:" + map1.containsValue(100));  
    }  
复制代码
遍历Map的4中方式:
第一种:
复制代码
public static void main(String[] args) {        //遍历Map 第一种方式
        Map<String, Integer> map1 = new HashMap<String, Integer>();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);  
        
        //通过 map1.keySet() 获取key  通过key 找到value
        for (String key : map1.keySet()) {
            Integer value = map1.get(key);
            System.out.println("key : "+key+" value : "+value);
        }
    }
复制代码
第二种:
复制代码
public static void main(String[] args) {        //遍历Map 第二种方式
        Map<String, Integer> map1 = new HashMap<String, Integer>();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);  
        
       //通过Map.Entry(String,Integer) 获取,而后运用entry.getKey()获取到键,通过entry.getValue()获取到值
       for(Map.Entry<String, Integer> entry : map1.entrySet()){
           System.out.println("键 key :"+entry.getKey()+" 值value :"+entry.getValue());
       }
    }
复制代码
常州网站开发培训第三种:
复制代码
//遍历Map 第三种方式
        Map<String, Integer> map1 = new HashMap<String, Integer>();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);  
        //第三种只遍历键大概值,通过增强for轮回
        for(String s1:map1.keySet()){//遍历map的键
           System.out.println("键key :"+s1);
        }        for(Integer s2:map1.values()){//遍历map的值
            System.out.println("值value :"+s2);
        }
           System.out.println("====================================");    
    }
复制代码
第四种:
 
复制代码
public static void main(String[] args) {        //遍历Map 第一种方式
        Map<String, Integer> map1 = new HashMap<String, Integer>();  
        map1.put("jack", 20);  
        map1.put("rose", 18);  
        map1.put("lucy", 17);  
        map1.put("java", 25);  
        
        //第四种Iterator遍历获取,而后获取到Map.Entry<String, String>,再得到getKey()和getValue()
        Iterator<Map.Entry<String, Integer>> it=map1.entrySet().iterator();        while(it.hasNext()){
            Map.Entry<String, Integer> entry=it.next(); 
            System.out.println("键key :"+entry.getKey()+" value :"+entry.getValue());
        }
        
    }
复制代码
HashMap
 
底层是哈希表数据布局,线程是差别步的,可以存入null键,null值。要包管键的唯独性,必要笼盖hashCode方式,和equals方式。
    案例:自定义工具作为Map的键。
 
复制代码
    public class 企业培训Demo3 {  
        public static void main(String[] args) {  
            HashMap<Person, String> hm = new HashMap<Person, String>();  
            hm.put(new Person("jack", 20), "1001");  
            hm.put(new Person("rose", 18), "1002");  
            hm.put(new Person("lucy", 19), "1003");  
            hm.put(new Person("h毫米", 17), "1004");  
            hm.put(new Person("ll", 25), "1005");  
            System.out.println(hm);  
            System.out.println(hm.put(new Person("rose", 18), "1006"));  //重写hashCode和equalse后key相像不会笼盖
      
            Set<Entry<Person, String>> entrySet = hm.entrySet();  
            Iterator<Entry<Person, String>> it = entrySet.iterator();  
            while (it.hasNext()) {  
                Entry<Person, String> next = it.next();  
                Person key = next.getKey();  
                String value = next.getValue();  
                System.out.println(key + " = " + value);  
            }  
        }  
    }  
      
    class Person {  
        private String name;  
        private int age;  
      
        Person() {  
      
        }  
      
        public Person(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 int hashCode() {  
      
            return this.name.hashCode() + age * 37;  
        }  
      
        @Override  
        public boolean equals(Object obj) {  
            if (obj instanceof Person) {  
                Person p = (Person) obj;  
                return this.name.equals(p.name) && this.age == p.age;  
            } else {  
                return false;  
            }  
        }  
      
        @Override  
        public String toString() {  
      
            return "Person@name:" + this.name + " age:" + this.age;  
        }  
      
    }  
    }  
复制代码
TreeMap
  TreeMap的排序,TreeMap可以对鸠合中的键举行排序。若何实现键的排序?
 
  方式一:元素本身具备对照性
 
  和TreeSet同样道理,必要让存储在键地位的工具实现Comparable接口,重写compareTo方式,也即是让元素本身具备对照性,这种方式叫做  元素的天然排序也叫做默认排序。
 
  方式二:容用具备对照性
 
  当元素本身不具备对照性,大概本身具备的对照性不是所必要的。辣么此时可以让容器本身具备。必要定义一个类实现接口Comparator,重  写compare方式,并将该接口的子类实例工具作为参数传递给TreeMap鸠合的组织方式。
 
  留意:当Comparable对照方式和Comparator对照方式同时存在时,以Comparator的对照方式为主;
 
  留意:在常州软件技术培训重写compareTo大概compare方式时,必须要明白对照的要紧前提相等时要对照次要前提。(假设姓名和年纪一致的薪金相像的人,  要是想要对人按照年纪的大小来排序,要是年纪相像的人,必要若何处分?不行干脆return 0,以为可能姓名差别(年纪相像姓名差别的人  是差别的人)。此时就必要举行次要前提校验(必要校验姓名),惟有姓名和年纪同时相等的才可以回笼0.)
 
  通过return 0来校验唯独性。
 
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Demo4 { 
    public static void main(String[] args) { 
        TreeMap<String, Integer> tree = new TreeMap<String, Integer>(); 
        tree.put("张三", 19); 
        tree.put("李四", 20); 
        tree.put("王五", 21); 
        tree.put("赵六", 22); 
        tree.put("周七", 23); 
        tree.put("张三", 24); 
        System.out.println(tree); 
        System.out.println("张三".compareTo("李四"));//-2094 
    } 
自定义元素排序
 
复制代码
    public class Demo3 {  
        public static void main(String[] args) {  
            TreeMap<Person, String> hm = new TreeMap<Person, String>(  
                    new MyComparator());  
            hm.put(new Person("jack", 20), "1001");  
            hm.put(new Person("rose", 18), "1002");  
            hm.put(new Person("lucy", 19), "1003");  
            hm.put(new Person("h毫米", 17), "1004");  
            hm.put(new Person("ll", 25), "1005");  
            System.out.println(hm);  
            System.out.println(hm.put(new Person("rose", 18), "1006"));  
      
            Set<Entry<Person, String>> entrySet = hm.entrySet();  
            Iterator<Entry<Person, String>> it = entrySet.iterator();  
            while (it.hasNext()) {  
                Entry<Person, String> next = it.next();  
                Person key = next.getKey();  
                String value = next.getValue();  
                System.out.println(key + " = " + value);  
            }  
        }  
    }  
      
    class MyComparator implements Comparator<Person> {  
      
        @Override  
        public int compare(Person p1, Person p2) {  
            if (p1.getAge() > p2.getAge()) {  
                return -1;  
            } else if (p1.getAge() < p2.getAge()) {  
                return 1;  
            }  
            return p1.getName().compareTo(p2.getName());  
        }  
      
    }  
      
    class Person implements Comparable<Person> {  
        private String name;  
        private int age;  
      
        Person() {  
      
        }  
      
        public Person(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 int hashCode() {  
      
            return this.name.hashCode() + age * 37;  
        }  
      
        @Override  
        public boolean equals(Object obj) {  
            if (obj instanceof Person) {  
                Person p = (Person) obj;  
                return this.name.equals(p.name) && this.age == p.age;  
            } else {  
                return false;  
            }  
        }  
      
        @Override  
        public String toString() {  
      
            return "Person@name:" + this.name + " age:" + this.age;  
        }  
      
        @Override  
        public int compareTo(Person p) {  
      
            if (this.age > p.age) {  
                return 1;  
            } else if (this.age < p.age) {  
                return -1;  
            }  
            return this.name.compareTo(p.name);  
        }  
      
    }  
复制代码
常州平台运营留意:Set的元素不行重复,Map的键不行重复,要是存入重复元素若何处分
 
Set元素重复元素不行存入add方式回笼false
 
Map的重复健将笼盖旧键,将旧值回笼。
 
 
 

上篇:上一篇:Android Fragment增加 FragmentTransaction
下篇:下一篇:android_button onclick点击的5种写法