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
- TreeUser{name=‘BB’, age=12}:2
-
使用自然排序:
-
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(); } } } }