一. HashMap
1. HashMap 由键值对组成,key是不能重复的,value 可以重复,通过 key 可以获得 value 值。
Java Platform SE 7 https://docs.oracle.com/javase/7/docs/api/2. HashMap 使用示例
// 定义 HashMap HashMap<String,String> hs = new HashMap<String,String>(); // put hs.put("1", "one"); hs.put("2", "two"); hs.put("3", "three"); hs.put("3", "three1"); hs.put("4", "one"); // remove hs.remove("1"); // 是否包含某个key contains boolean b = hs.containsKey("2"); System.out.println(b); // 遍历 // 先得到 key 的 set Set<String> keys = hs.keySet(); // 遍历 key 的 set 得到 value for(String key: keys){ String value = hs.get(key); System.out.println(key+":"+value); } // 自定义的 key 类型,需要重载 hashCode() 和 equals() class MyInt{ @Override public String toString() { return i+""; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + i; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MyInt other = (MyInt) obj; if (i != other.i) return false; return true; } private int i; public MyInt(int i){ this.i = i; } } HashMap<MyInt,String> hm = new HashMap<MyInt,String>(); MyInt i1 = new MyInt(1); MyInt i2 = new MyInt(2); MyInt i3 = new MyInt(2); hm.put(i1, "one"); hm.put(i2, "two"); hm.put(i3, "three"); for(MyInt key:hm.keySet()){ String value = hm.get(key); System.out.println(key+":"+value); }
二. TreeMap
1. TreeMap 中的元素会按照 key 来排序。自定义的 key 对象需要重载 hashCode, equals 和 compareTo 方法。
class MyInt implements Comparable<MyInt>{ @Override public String toString() { return i+""; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + i; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MyInt other = (MyInt) obj; if (i != other.i) return false; return true; } private int i; public MyInt(int i){ this.i = i; } @Override public int compareTo(MyInt o) { if(this.i>o.i){ return -1; }else if(this.i<o.i){ return 1; }else{ return 0; } } } TreeMap<MyInt,String> tm = new TreeMap<MyInt,String>(); MyInt i1 = new MyInt(1); MyInt i2 = new MyInt(2); MyInt i3 = new MyInt(3); tm.put(i1, "one"); tm.put(i2, "two"); tm.put(i3, "three"); for(MyInt key:tm.keySet()){ String value = tm.get(key); System.out.println(key+":"+value); }