• java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)


     

    *Map接口:采用是键值对的方式存放数据。无序

    HashMap:
    *常见的实现类:
    *--HashMap:基于哈希表的 Map 接口的实现。
    *常用的构造方法:
    * HashMap()构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
    * HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
    *常用方法:
    * put(K key, V value)在此映射中关联指定值与指定键。
    * get(Object key) 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
    * size() 返回此映射中的键-值映射关系数。
    * remove(Object key) 从此映射中移除指定键的映射关系(如果存在)。
    * clear() 从此映射中移除所有映射关系。
    * containsKey(Object key) 如果此映射包含对于指定键的映射关系,则返回 true。
    * containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
    *----LinkedHashMap
    *--Hashtable
    *--TreeMap

    import java.util.HashMap;
    import java.util.Map;
    
    public class TestHashMap {
        public static void main(String[] args) {
            Map<String,String> map = new HashMap<String,String>();
            //向容器中添加元素:以键值对的方式进行存放.
            map.put("jack", "成龙");
            map.put("jay", "周杰伦");
            map.put("eason", "陈奕迅");//添加元素
            //取:
    //        map.remove("eason");//通过key移除元素
            System.out.println("是否包含eason:"+map.containsKey("eason"));
            System.out.println("是否包含成龙:"+map.containsValue("成龙"));
            System.out.println("容器中总共有"+map.size()+"个键值对元素");
            String name = map.get("jack");//根据key获取元素的值
            System.out.println(name);
            String name2 = map.get("jay");
            System.out.println(name2);
            
            
            
        }
    }

     HashMap取值的两种方法:

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    /**
     *Map的遍历 
     *    Set<K> keySet() 返回此映射中所包含的键的 Set 视图。 
     *  Set<Map.Entry<K,V>> entrySet() 返回此映射所包含的映射关系的 Set 视图。 
     */
    public class TestHashMap2 {
        public static void main(String[] args) {
            Map<String,String> map = new HashMap<String,String>();
            //向容器中添加元素:以键值对的方式进行存放.
            map.put("jack", "成龙");
            map.put("jay", "周杰伦");
            map.put("eason", "陈奕迅");//添加元素
            map.put("jack", "杰克");//键如果重复,将发生覆盖
            System.out.println(map);
            //方式1:先获取键的集合,通过键获取值
            Set<String> keySet = map.keySet();
            for (String key : keySet) {
                String value = map.get(key);
                System.out.println(key+"----"+value);
            }
            System.out.println("-------------------------------");
            //方式2:获取键值对的集合,然后从键值对获取键和值。(推荐)
            //Entry<String,String>:对键和值进行泛型,Set<Entry<String,String>>对Set集合中Entry(键值对)进行泛型
            Set<Entry<String,String>> entrySet = map.entrySet();
            for (Entry<String, String> entry : entrySet) {
                String key = entry.getKey();//获取键值对的键
                String value = entry.getValue();//获取键值对中值
                System.out.println(key+"****"+value);
            }
        }
    }

     LinkedHashMap继承了HashMap:

    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.Map.Entry;
    import java.util.Set;
    
    /**
     * java.util.LinkedHashMap:哈希表+链表,有序(添加顺序其实就是摆放顺序),继承了HashMap类。
     * 常用的构造方法:
     *     LinkedHashMap()构造一个带默认初始容量 (16) 和加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例
     *      LinkedHashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例。
     * 常用的方法:
     *  put(K key, V value)在此映射中关联指定值与指定键。    
     *  get(Object key) 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
     *  size() 返回此映射中的键-值映射关系数。
     *  remove(Object key) 从此映射中移除指定键的映射关系(如果存在)。
     *  clear() 从此映射中移除所有映射关系。
     *  containsKey(Object key)  如果此映射包含对于指定键的映射关系,则返回 true。
     *  containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
     *  Set<K> keySet() 返回此映射中所包含的键的 Set 视图。 
     *  Set<Map.Entry<K,V>> entrySet() 返回此映射所包含的映射关系的 Set 视图。
     */
    public class TestLinkedHashMap {
        public static void main(String[] args) {
            LinkedHashMap<String, String> map = new LinkedHashMap<String,String>();
            map.put("jack", "成龙");
            map.put("jay", "周杰伦");
            map.put("eason", "陈奕迅");//添加元素
            //方式1:通过先遍历键的集合获取键,然后通过键获取值
            Set<String> keySet = map.keySet();
            for (String key : keySet) {
                String value = map.get(key);
                System.out.println(key+"-----"+value);
            }
            //方式2:通过先遍历键值对的集合获取键值对,然后通过键值对获取键和值。
    //        Set<Entry<String,String>> entrySet = map.entrySet();
    //        for (Entry<String, String> entry : entrySet) {
    //            System.out.println(entry.getKey()+"==="+entry.getValue());
    //        }
            for(Iterator<Entry<String,String>> iter = map.entrySet().iterator();iter.hasNext();){
                Entry<String,String> entry = iter.next();
                System.out.println(entry.getKey()+"==="+entry.getValue());
            }
        }
    }

     TreeMap:

    *TreeMap:类似于TreeSet,采用二叉树的方式存储数据,有序(大小顺序)。
    *常用的构造函数:
    *TreeMap() 使用键的自然顺序构造一个新的、空的树映射。 插入该映射的所有键都必须实现 Comparable 接口.
    *TreeMap(Comparator<? super K> comparator) 构造一个新的、空的树映射,该映射根据给定比较器进行排序。

    (对象放前面,值放后面)

    public class TestTreeMap {
        public static void main(String[] args) {
            TreeMap<String,String> map = new TreeMap<String,String>();
            map.put("a","aaa");
            map.put("c","ccc");
            map.put("b","bbb");
            System.out.println(map);
            System.out.println("------------");
            TreeMap<Student,String> map2 = new TreeMap<Student,String>();
            Student stu1 = new Student("zhangsan",20);
            Student stu2 = new Student("lisi",21);
            Student stu3 = new Student("wangwu",18);
            map2.put(stu1,"zhangsan");
            map2.put(stu2,"lisi");
            map2.put(stu3,"wangwu");
            System.out.println(map2);
        }
    }

    *TreeMap(Comparator<? super K> comparator)   构造一个新的、空的树映射,该映射根据给定比较器进行排序。

    import java.util.Comparator;
    
    public class AgeComparator implements Comparator<Student> {
    
        @Override
        public int compare(Student o1, Student o2) {
            return -(o1.getAge()-o2.getAge());
        }
    
    }
    public class TestTreeMap2 {
        public static void main(String[] args) {
            TreeMap<Student,String> map = new TreeMap<Student,String>(new AgeComparator());
            Student stu1 = new Student("zhangsan",20);
            Student stu2 = new Student("lisi",21);
            Student stu3 = new Student("wangwu",18);
            map.put(stu1,"zhangsan");
            map.put(stu2,"lisi");
            map.put(stu3,"wangwu");
            System.out.println(map);
        }
    }

    * Collection和Collections的区别:


    * Collection是List和Set的父接口,而Collections是操作Collection集合的工具类。
    * Collections(对Collection集合进行操作的工具类),类似Arrays类(对数组进行操作的工具类),提供了若干个静态的方法以方便操作集合。
    * 常用的方法:
    * addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。
    * sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。
    * reverse(List<?> list)反转指定列表中元素的顺序。
    * max(Collection<? extends T> coll) 根据元素的自然顺序,返回给定 collection 的最大元素。
    * min(Collection<? extends T> coll) 根据元素的自然顺序 返回给定 collection 的最小元素。
    * binarySearch(List<? extends Comparable<? super T>> list, T key)
    * 使用二分搜索法搜索指定列表,以获得指定对象,必须根据列表元素的自然顺序对列表进行升序排序

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class TestCollections {
        public static void main(String[] args) {
            List<Integer> list = new ArrayList<Integer>();
            list.add(10);
            list.add(1);
            list.add(18);
            list.add(6);
            list.add(9);
            System.out.println("排序前:"+list);
            Collections.sort(list);//排序,默认按照升序进行排列
            System.out.println("排序后:"+list);
            Collections.reverse(list);//反转:倒序输出
            System.out.println("反转后:"+list);
            int index = Collections.binarySearch(list, 9);//二分查找:待查找的集合中元素必须有大小顺序
            
            System.out.println("index="+index);
            Integer max = Collections.max(list);
            System.out.println("max="+max);
            Integer min = Collections.min(list);
            System.out.println("min="+min);
        }
    }

     Collection-value();

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    /**
     *3、定义一个Worker类,属性:name:String,age:int,salary:double 
        a).把若干Worker对象放在List中,排序并遍历输出,按照age升序排列
        b).把若干Worker对象放在Set中并遍历,要求没有重复元素
        c).把若干Worker对象放在Map中并按照三种方式分别遍历,要求以Worker的姓名作为key。
     *
     */
    public class Homework3 {
        //1.把若干Worker对象放在List中,排序并遍历输出,按照age升序排列
        public void saveAsList(){
            List<Worker> list = new ArrayList<Worker>();
            Worker w1 = new Worker("zhangsan",20,5000);
            Worker w2 = new Worker("lisi",22,6000);
            Worker w3 = new Worker("wangwu",18,3000);
            list.add(w1);
            list.add(w2);
            list.add(w3);
            Collections.sort(list,new AgeComparator());//排序
            for (Worker worker : list) {
                System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
            }
        }
        
        //2.把若干Worker对象放在Set中并遍历,要求没有重复元素
        public void saveAsSet(){
            Set<Worker> set = new HashSet<Worker>();
            Worker w1 = new Worker("zhangsan",20,5000);
            Worker w2 = new Worker("lisi",22,6000);
            Worker w3 = new Worker("wangwu",18,3000);
            Worker w4 = new Worker("wangwu",18,3000);
            set.add(w1);
            set.add(w2);
            set.add(w3);
            set.add(w4);
            //遍历Set
            for (Worker worker : set) {
                System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
            }
            
        }
        
        //3.把若干Worker对象放在Map中并按照三种方式分别遍历,要求以Worker的姓名作为key。
        public void saveAsMap(){
            Map<String,Worker> map = new HashMap<String,Worker>();
            Worker w1 = new Worker("zhangsan",20,5000);
            Worker w2 = new Worker("lisi",22,6000);
            Worker w3 = new Worker("wangwu",18,3000);
            map.put(w1.getName(), w1);
            map.put(w2.getName(), w2);
            map.put(w3.getName(), w3);
            System.out.println("第一种遍历:");
            Set<String> keySet = map.keySet();
            for (String key : keySet) {
                Worker worker = map.get(key);
                System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
            }
            System.out.println("第二种遍历:");
            Set<Entry<String,Worker>> entrySet = map.entrySet();
            for (Entry<String, Worker> entry : entrySet) {
                Worker worker = entry.getValue();
                System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
            }
            System.out.println("第三种遍历:");
            Collection<Worker> values = map.values();//获取值的集合
            for (Worker worker : values) {
                System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
            }
        }
    
        
        public static void main(String[] args) {
            Homework3 homework3 = new Homework3();
    //        homework3.saveAsList();
    //        homework3.saveAsSet();
            homework3.saveAsMap();
        }
    }
  • 相关阅读:
    在线免费学习全世界的课程
    【安卓】imageView.scaleType取centerCrop后,再用padding时显示异常?
    win8+VS2012搭建OpenGL超级宝典的环境
    leetcode第一刷_Plus One
    HASH JION AND NESTED JION
    Hive创建外部表以及分区
    Android数字签名解析(一)
    Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程
    用C#生成不反复的随机数
    Swift数据类型及数据类型转换
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/7008736.html
Copyright © 2020-2023  润新知