java基础-Java集合框架-Map接口- TreeMap、Hashtable、Properties

14 篇文章 0 订阅
5 篇文章 0 订阅
本文介绍了Java中TreeMap的使用方法,包括按照key进行自然排序和定制排序。通过示例展示了如何自定义Comparator进行排序,并解释了Hashtable和Properties类的基本用法。TreeMap在自然排序中依据key的Comparable接口实现排序,而在定制排序中则可通过传入Comparator来改变排序规则。
摘要由CSDN通过智能技术生成

TreeMap使用方法

  • 向TreeMap中添加key-value,要求key必须是同一个类创建的对象

  • 因为在TreeMap中要按照key进行排序:自然排序,定制排序

  • 使用定制排序:

  • package com.jl.java.base.map;
    
    import java.util.Comparator;
    import java.util.TreeMap;
    
    /**
     * @author jiangl
     * @version 1.0
     * @date 2021/4/26 9:28
     */
    public class TreeMapTest {
    
        public static void main(String[] args) {
            TreeMap<TreeUser,String> map = new TreeMap<>(new Comparator<TreeUser>() {
                @Override
                public int compare(TreeUser o1, TreeUser o2) {
                    return Integer.compare(o1.getAge(),o2.getAge());
                }
            });
            map.put(new TreeUser("ZZ",100),"1");
            map.put(new TreeUser("DD",60),"3");
            map.put(new TreeUser("BB",12),"2");
            map.put(new TreeUser("CC",32),"3");
            map.put(new TreeUser("AA",42),"5");
    
            for(TreeUser i : map.keySet()){
                System.out.println(i + ":"+map.get(i));
            }
    
    
        }
    }
    
    class TreeUser implements Comparable<TreeUser>{
        private String name;
        private int age;
    
        public TreeUser(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
    /*    @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }
            TreeUser treeUser = (TreeUser) o;
            return age == treeUser.age && Objects.equals(name, treeUser.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(name, 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 "TreeUser{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    
    
        @Override
        public int compareTo(TreeUser o) {
            int i = this.getName().compareTo(o.getName());
            if(i != 0){
                return i;
            }else{
                return Integer.compare(this.getAge(),o.getAge());
            }
        }
    }
    
  • 输出结果:

    • TreeUser{name=‘BB’, age=12}:2
      TreeUser{name=‘CC’, age=32}:3
      TreeUser{name=‘AA’, age=42}:5
      TreeUser{name=‘DD’, age=60}:3
      TreeUser{name=‘ZZ’, age=100}:1
  • 使用自然排序:

  • package com.jl.java.base.map;
    
    import java.util.Comparator;
    import java.util.TreeMap;
    
    /**
     * @author jiangl
     * @version 1.0
     * @date 2021/4/26 9:28
     */
    public class TreeMapTest {
    
        public static void main(String[] args) {
            TreeMap<TreeUser,String> map = new TreeMap<>();
            map.put(new TreeUser("ZZ",100),"1");
            map.put(new TreeUser("DD",60),"3");
            map.put(new TreeUser("BB",12),"2");
            map.put(new TreeUser("CC",32),"3");
            map.put(new TreeUser("AA",42),"5");
    
            for(TreeUser i : map.keySet()){
                System.out.println(i + ":"+map.get(i));
            }
    
    
        }
    }
    
    class TreeUser implements Comparable<TreeUser>{
        private String name;
        private int age;
    
        public TreeUser(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
    /*    @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }
            TreeUser treeUser = (TreeUser) o;
            return age == treeUser.age && Objects.equals(name, treeUser.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(name, 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 "TreeUser{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    
    
        @Override
        public int compareTo(TreeUser o) {
            int i = this.getName().compareTo(o.getName());
            if(i != 0){
                return i;
            }else{
                return Integer.compare(this.getAge(),o.getAge());
            }
        }
    }
    
    • 输出结果:
    • TreeUser{name=‘AA’, age=42}:5
      TreeUser{name=‘BB’, age=12}:2
      TreeUser{name=‘CC’, age=32}:3
      TreeUser{name=‘DD’, age=60}:3
      TreeUser{name=‘ZZ’, age=100}:1

Map实现类之四:Hashtable

  • Hashtable是个古老的Map实现类,JDK1.0就提供了。不同于HashMap,Hashtable是线程安全的,Hashtable无序。
  • Hashtable实现原理和HashMap相同,功能相同。底层使用哈希表架构,查询速度快,很多情况下可以互用。
  • 与HashMap不同,Hashtable不允许使用null作为key和value
  • 与HashMap一样,Hashtable也不能保证其中Key-Value对的顺序
  • Hashtable判断两个key相等、两个value相等的标准,与hashMap一致

Map实现类之五:Properties

  • Properties类是Hashtable的子类,该对象用于处理属性文件

    • public
      class Properties extends Hashtable<Object,Object> {
      }
      
  • 由于属性文件里的key、value都是字符串类型,所以Properties里的key和value都是字符串类型

  • 存取数据时,建议使用setProperties(String key,String value)方法和getProperties(String key)方法

  • 构造方法

    • /**
       * Creates an empty property list with no default values.
       */
      public Properties() {
          this(null);
      }
      
      /**
       * Creates an empty property list with the specified defaults.
       *
       * @param   defaults   the defaults.
       */
      public Properties(Properties defaults) {
          this.defaults = defaults;
      }
      
  • 使用方法:

  • package com.jl.java.base.map;
    
    import org.junit.Test;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Properties;
    
    /**
     * @author jiangl
     * @version 1.0
     * @date 2021/4/26 9:49
     */
    public class PropertiesTest {
    
        public static void main(String[] args) throws IOException {
            FileInputStream fileInputStream = null;
            try {
                Properties properties = new Properties();
                fileInputStream = new FileInputStream("jdbc.properties");
                properties.load(fileInputStream);
                System.out.println(properties.getProperty("name"));
                System.out.println(properties.getProperty("password"));
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(fileInputStream != null){
                    fileInputStream.close();
                }
            }
    
        }
    
    
    }
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值