Map集合实现类

1、HashMap。

HashMap是一个散列表。它存储的结构是键值对(key-value)映射。JDK1.2。

特点

1、允许空键和空值,但空值只能有一个,放在首位。

2、无序。因为要根据hashCode重新计算位置。

3、JKD8前底层采用数组+链表。JDK8后采用数组+链表+红黑树。

4、线程不安全。

5、实现了Map接口全部方法。

6、先使用hashCode判断两个元素是否相同,相同则再使用equals方法比较,相等咋不添加。

实例化HashMap对象

HashMap hashMap = new HashMap();

添加元素

        hashMap.put("name", "小明");
        hashMap.put("sex", "");
        hashMap.put("age", 18);
        //key相同 age已经存在,所以这里不能成功加入
        hashMap.put("age", 19);
        //key相同,value不相同,但是依旧可以加入,HahMap只是key不能重复。
        hashMap.put("username", "小明");

移除元素

hashMap.remove("age");

清空元素

hashMap.clear();

遍历元素

       //1、keySet()。
        //因为这里我们知道传入的key和value为String类型,所以使用Stirng类型接收
        Set<String> set = hashMap.keySet();
        for (String key : set) {
            System.out.println("key:" + key);
            System.out.println("value:" + hashMap.get(key));
        }
        //entrySet()。
        //entrySet比keySet效率高,因为不用遍历两次集合。
        Set<Map.Entry<String, String>> entrySet = hashMap.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            System.out.println("ket:" + entry.getKey() + ",value:" + entry.getValue());
        }

HashMap中的判断

System.out.println("hashMap是否包含key:" + hashMap.containsKey("name"));
System.out.println("hashMap是否包含value:" + hashMap.containsValue(""));

 

TreeMap

TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序。其中,可以使用元素的自然顺序,也可以使用集合中自定义的比较器来进行排序

特点

1、TreeMap是一个有序的key-value集合,支持序列化。

2、内部使用红黑树实现。

3、线程不安全。

4、自动对传入的元素进行排序。

实例化TreeMap对象

TreeMap<User, Integer> treeMap = new TreeMap();

添加元素

        User u1 = new User("小明", 18);
        User u2 = new User("小红", 24);
        User u3 = new User("小白", 11);

        treeMap.put(u1, 0);
        treeMap.put(u2, 1);
        treeMap.put(u3, 2);
        //直接执行输出会报User cannot be cast to java.lang.Comparable异常,
        // 这个是因为我们的User类需要去实现Comparable接口,并去重写compareTo方法。
        System.out.println(treeMap);
public class User implements Comparable<User> {

    private String name;

    private Integer age;

    public User(String name, Integer 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 "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(User o) {
        int n1 = this.age - o.getAge();
        int n2 = this.name.compareTo(o.getName());
        return n1 == 0 ? n2 : n1;
    }
}

  如果不想实现Comparable接口,我们也可以在创建对象时去定制化比较:

TreeMap<User, Integer> treeMap = new TreeMap<>(new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                return o1.getAge() - o2.getAge();
            }
        });

 

移除元素

treeMap.remove(u1);

清空元素

treeMap.clear();

遍历元素

        //1、使用keySet
        for (User user : treeMap.keySet()) {
            System.out.println(user);
        }
        //1、使用entrySet
        for (Map.Entry<User, Integer> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }    

 

 

HashTable

Hashtable 类代表了一系列基于键的哈希代码组织起来的 键/值对。JDK1.0

特点

1、线程安全,使用了synchorized锁。

2、运行效率慢。

3、不允许key或value为null。

4、底层使用数组+链表。

  

Properties

HashTable的子类,要求hey和value都是String。通常用于配置文件的读取。

 

posted @ 2022-12-16 21:15  Amireux-126  阅读(34)  评论(0)    收藏  举报