Map<Key,Value>
Map集合类是一个基于哈希表实现的接口,下面有实现类HashMap
SortedMap是继承自Map的接口,实现类为TreeMap
HashMap
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)
1.7版本HashMap基于的数据结构是数组+链表
1.8版本基于的是数据结构是数组+链表+红黑树.
这里只是简单的整理一下hashMap的使用
构造方法:
常用的方法:
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("苹果", 123);
map.put("梨", 456);
map.put("西瓜", 789);
//for (String key : map.keySet()) {
// Integer value = map.get(key);
// System.out.println(key + " = " + value);
// }
for(Map.Entry<String,Integer> e:map.entrySet()){
string key=e.getKey();
Integer value=e.getValue();
System.out.println(key + " = " + value);
}
}
最后注意:hashMap是无序的
TreeMap
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的
这里也只记录一下简单的用法.
构造方法:
基本用法与hashmap相同, 最后TreeMap是有序的
所以使用TreeMap时,放入的Key,必须实现Comparable的接口
String Integger 这些类已经实现了Comparable接口,可直接使用.如果没有实现Comparable接口,就需要自定义一个排序算法.
例:下面这个student类实现Comparable接口,覆写CompareTo()
import java.util.*;
public class Test {
public static void main(String[] args) {
Map<Student, Integer> map = new TreeMap<>();
map.put(new Student("张三", 89), 1);
map.put(new Student("李四", 46), 2);
map.put(new Student("王五", 49), 3);
for (Student key : map.keySet()) {
System.out.println(key);
}
System.out.println(map.get(new Student("张三", 89)));
}
}
class Student implements Comparable<Student> {
public String name;
public int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public int compareTo(Student o) {
Student p = (Student) o;
if (this.score == p.score) {
return 0;
}
return this.score < p.score ? -1 : 1;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", score=" + score +
'}';
}
}