zoukankan      html  css  js  c++  java
  • java 集合(Map3)

    Map接口下的实现类:

    HashMap

    1.存储原理:

      向HashMap中添加元素时,首先会调用hashCode(),算的哈希值,然后

      算出该元素在哈希表中的存储位置。

    情况1

    情况2(java  集合(Map2)写过了)

    2.有必要时要重写 hashCode(), equals()

    import java.util.*;
    
    public class ex12 {
        public static void main(String[] args) {
          HashMap map = new HashMap();
            map.put(new Person(110, "Tom"), 001);
            map.put(new Person(220, "Jack"), 002);
            map.put(new Person(330, "TNT"), 003);
            map.put(new Person(110, "Bat"), 004);//   如果出现了相同的键,那么后添加的会取代原来的,可以观察运行结果  Tom 没有被输出
            System.out.println(map);
    
            }
        }
    
    class Person{
        int id;
        String name;
    
        public Person(int id, String name) {
            this.id = id;
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "[ id = " + this.id + ", name = " + this.name + " ]";
        }
    
        @Override
        public int hashCode() {
            return this.id = id;
        }
    
        @Override
        public boolean equals(Object obj) {
            Person p = (Person)obj;
            return this.id == p.id;
        }
    }
    {[ id = 330, name = TNT ]=3, [ id = 220, name = Jack ]=2, [ id = 110, name = Tom ]=4}
    
    Process finished with exit code 0

    TreeMap(注意下面代码中的泛型使用)

    存储原理:基于红黑树的(二叉数)对键进行自然排序。

    注意事项:1)向TreeMap添加元素时,如果元素的键具有自然顺序时,会按照自然顺序排序。

                  2)-----------------------,-----------------不具有自然顺序,要实现Compareable接口。

         3)-----------------------,--------------------------------,没有实现-----------------,必须在创建TreeMap时,传入比较器。

    import java.util.*;
    
    public class ex12 {
        public static void main(String[] args) {
         TreeMap<Emp, Integer> map1 = new TreeMap<Emp, Integer>();
            map1.put(new Emp("Tom", 200), 100);
            map1.put(new Emp("Tom", 20), 200);
            map1.put(new Emp("Tom", 190), 300);
            map1.put(new Emp("Tom", 200), 400);
            System.out.println(map1);
    
            }
        }
    
    class Emp implements Comparable<Emp>{
        String name;
        int salary;
    
        public Emp(String name, int salary) {
            this.name = name;
            this.salary = salary;
        }
    
        @Override
        public int compareTo(Emp o) {
            return this.salary - o.salary;
        }
    
        @Override
        public String toString() {
            return "[ name = " + this.name + ", salary = " + this.salary + " ]";
        }
    }
    {[ name = Tom, salary = 20 ]=200, [ name = Tom, salary = 190 ]=300, [ name = Tom, salary = 200 ]=400}
    
    Process finished with exit code 0
  • 相关阅读:
    java中sleep()和wait()区别
    那些年遇到的坑--------“集合转数组”
    HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历
    java.util.ConcurrentModificationException 异常原因和解决方法
    java.lang.Exception: No tests found matching
    https和http的主要区别
    交换性别sql
    判断奇偶数
    Jmeter安装使用
    java.io.EOFException: Unexpected EOF read on the socket
  • 原文地址:https://www.cnblogs.com/lifehrx/p/5807356.html
Copyright © 2011-2022 走看看