zoukankan      html  css  js  c++  java
  • Java集合——集合框架Map接口

    1.Map接口

    public interface Map<K,V>
    将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 

    2.HashMap、Hashtable、TreeMap

    public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable

    基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
    public class MapDemo {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            hashMap();
        }
        /**
         * 是二叉树数据结构的实现(红黑树--平衡二叉树)
         */
        public static void treeMap(){
            TreeMap<String,String> map=new TreeMap<String,String>();
            map.put("1", "hah");
            
            
        }
        /**
         * 线程安全,同步的,效率低,与HashMap相似,初始容量为11,每次扩充2倍+1
         */
        public static void hashtable(){
            Hashtable<String, String> table=new Hashtable<String,String>();
            
        }
        /**
         * 使用哈希表(数组+链表)实现,键不能重复,如果相同就会覆盖原来的对象
         * 默认创建一个长度为16的数组,加载因子为0.75(当数组满75%的容量后,表示需要重新扩充,又叫哈希表重新散列)
         * 哈希表保存对象时,会根据key对象的hashcode值对HashMap的容量求余,决定该对象要存在数组的哪个位置,
         * 如果该位置有对象那么这些对象以链表的结构存储
         * 线程不安全,效率高
         * 每次扩充2倍
         */
        public static void hashMap(){
            Map<String,String> map=new HashMap<String,String>();
            map.put("1","小明");
            System.out.println("1".hashCode()%16);
            map.put("2","小花");
            System.out.println("2".hashCode()%16);
            map.put("3","小刚");
            System.out.println("3".hashCode()%16);
            System.out.println("----------");
            System.out.println(map.size());
            //取值
            System.out.println(map.get("1"));
            System.out.println(map.get("2"));
            
            System.out.println(map.containsKey(1));
            
        }
    
    }

     3.Map集合的输出

    在Collection接口中,可以使用iterator()方法为Iterator接口实例化,并且进行输出操作,但是在Map接口中并没有此方法的定义,所以Map接口本身是不能直接使用iterator进行输出的。

    hashcode深入分析:两个hashcode值不同,则两个对象一定不同;两个对象不同,hashcode值可能相同;程序员要做的是任何情况下输出同一个对象的hashcode值都应该相同

    public class MapIterator {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            iterator();
            stack();
            queue();
        }
        public static void iterator(){
            HashMap<String,Student> map=new HashMap<String,Student>();
            map.put("jack", new Student("jack",2));
            map.put("tom", new Student("tom",3));
            map.put("honey", new Student("honey",4));
            
            //遍历
            Set<String> keys=map.keySet();
            Iterator<String> i=keys.iterator();
            while(i.hasNext()){
                String key=i.next();
                Student s=map.get(key);
                System.out.println(key+"-->"+s);
            }
        }
        /**
         * 堆栈
         */
        public static void stack(){
            Stack<String> s=new Stack<String>();
            s.push("xiaoming");//压栈,入栈
            s.push("xiaohua");
            
            String str=s.pop();//出栈
            System.out.println(str);
        }
        /**
         * 队列
         */
        public static void queue(){
            Queue<String> q=new LinkedList<String>();
            q.add("xiaogang");
            q.add("xiaobin");
            
            //移除队列的头
            String str=q.poll();
            System.out.println(str);
        }
    }

    4.对象一对多关系可以使用HashSet实现

    public class Person {
        private String name;
        private Set<Book> books=new HashSet<Book>();
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Set<Book> getBooks() {
            return books;
        }
        public void setBooks(Set<Book> books) {
            this.books = books;
        }
        
    }
    public class Book {
        private String name;
        private Person person;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Person getPerson() {
            return person;
        }
        public void setPerson(Person person) {
            this.person = person;
        }
    }
  • 相关阅读:
    Python——python读取html实战,作业7(python programming)
    Python——python读取html实战,作业7(python programming)
    Python——python读取xml实战,作业6(python programming)
    Python——python读取xml实战,作业6(python programming)
    二分查找(c &amp; c++)
    大型站点技术架构(八)--站点的安全架构
    Android MTP 文件浏览Demo
    HDU2037 事件排序问题
    折腾开源WRT的AC无线路由之路-3
    启动VIP报CRS-1028/CRS-0223致使VIP状态为UNKNOWN故障分析与解决
  • 原文地址:https://www.cnblogs.com/shenhainixin/p/5130658.html
Copyright © 2011-2022 走看看