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。通常用于配置文件的读取。

浙公网安备 33010602011771号