Map接口,HashMap,LinkHashMap,TreeMap
1.1 Map接口
Map接口称为键值对集合或者映射集合,其中的元素(entry)是以键值对(key-value)的形式存在。
Map 容器接口中提供了增、删、改、查的方式对集合进行操作。
Map接口中都是通过key来操作键值对,一般key是已知。通过key获取value。
1.1.1 map常用方法
public static void main(String[] args) {
/** * 增:put/putAll * 删:clear/remove * 改:put * 查:get/containsKey/containsValue * 其他:isEmpty/size */
Map<String, String> map = new HashMap<String,String>();
// 【1】put map.put("A", "apple"); map.put("B", "banana"); map.put("C", "coco");
// 【2】删除 // map.clear(); // smap.remove("A");
// 【3】修改 //map.put("A", "apple x");
// 【4】查看 String val = map.get("A"); System.out.println(map.containsKey("D"));
System.out.println(map); } |
1.1.2 map接口的遍历
通过keySet() 返回map中键的set集合。
public static void main(String[] args) {
Map<String, String> map = new HashMap<String,String>();
map.put("B", "banana"); map.put("A", "apple"); map.put("C", "coco"); // map无序 // 可以根据key的自然顺序 让map有序 => 一般用string作为key System.out.println(map);
// 遍历 Set<String> keys = map.keySet(); for (String key : keys) { System.out.println(key+"=>"+map.get(key)); }
Iterator<String> it = keys.iterator(); while(it.hasNext()) { String key = it.next(); System.out.println(key+"=>"+map.get(key)); } } |
map中以键值对作为元素,键值对在map中称为entry,entrySet返回键值对的set集合。
public static void main(String[] args) {
Map<String, String> map = new HashMap<String,String>();
map.put("B", "banana"); map.put("A", "apple"); map.put("C", "coco"); // map无序 // 可以根据key的自然顺序 让map有序 => 一般用string作为key System.out.println(map);
// entrySet Set<Entry<String, String>> entrySet = map.entrySet(); for (Entry<String, String> entry : entrySet) { System.out.println(entry.getKey()+"=>"+entry.getValue()); }
Iterator<Entry<String, String>> it2 = entrySet.iterator(); while(it2.hasNext()) { Entry<String, String> entry = it2.next(); System.out.println(entry.getKey()+"=>"+entry.getValue()); } } |
Map接口的实现类HashMap、LinkedHashMap、TreeMap
1.2 HashMap
HashMap 是Map的实现类,key以HashSet存储。
public static void main(String[] args) {
/* HashMap<String, Object> map = new HashMap<String,Object>();
ArrayList<String> list1 = new ArrayList<String>(); list1.add("alex"); list1.add("alice"); list1.add("allen"); map.put("A", list1);
ArrayList<String> list2 = new ArrayList<String>(); list2.add("ben"); list2.add("bill"); map.put("B", list2);
System.out.println(map); */
HashMap<Student, Object> map = new HashMap<Student,Object>();
ArrayList<String> list1 = new ArrayList<String>(); list1.add("alex"); list1.add("alice"); list1.add("allen"); Student s1 = new Student("001", "大狗", 20); map.put(s1, list1);
ArrayList<String> list2 = new ArrayList<String>(); list2.add("ben"); list2.add("bill"); Student s2 = new Student("001", "大狗", 20); // 修改 map.put(s2, list2); System.out.println(map);
} |
总结:
[1] 向HashMap中存储元素时,key一定要实现hashCode和equals
[2] 一般建议使用String作为Map接口的key
1.3 LinkedHashMap
LinkedHashMap是Map接口的实现类,key以LinkedHashSet存储。
哈希表散列key,链表维持key的添加顺序。
public static void main(String[] args) {
/*LinkedHashMap<String, Object> map = new LinkedHashMap<String,Object>();
ArrayList<String> list2 = new ArrayList<String>(); list2.add("ben"); list2.add("bill"); map.put("B", list2);
ArrayList<String> list1 = new ArrayList<String>(); list1.add("alex"); list1.add("alice"); list1.add("allen"); map.put("A", list1);
System.out.println(map);*/
HashMap<Student, Object> map = new HashMap<Student,Object>();
ArrayList<String> list1 = new ArrayList<String>(); list1.add("alex"); list1.add("alice"); list1.add("allen"); Student s1 = new Student("001", "大狗", 20); map.put(s1, list1);
ArrayList<String> list2 = new ArrayList<String>(); list2.add("ben"); list2.add("bill"); Student s2 = new Student("001", "大狗", 20); // 修改 map.put(s2, list2); System.out.println(map);
} |
1.4 TreeMap
TreeMap是Map的实现类,key以TreeSet存储。
public static void main(String[] args) {
/*TreeMap<String, Object> map = new TreeMap<String,Object>(new Comparator<String>() {
@Override public int compare(String o1, String o2) { return o1.length() - o2.length(); } });
ArrayList<String> list2 = new ArrayList<String>(); list2.add("ben"); list2.add("bill"); map.put("Aa", list2);
ArrayList<String> list1 = new ArrayList<String>(); list1.add("alex"); list1.add("alice"); list1.add("allen"); map.put("B", list1);
System.out.println(map);*/
TreeMap<Student, Object> map = new TreeMap<Student,Object>(new Comparator<Student>() {
@Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } });
ArrayList<String> list1 = new ArrayList<String>(); list1.add("alex"); list1.add("alice"); list1.add("allen"); Student s1 = new Student("001", "大狗", 20); map.put(s1, list1);
ArrayList<String> list2 = new ArrayList<String>(); list2.add("ben"); list2.add("bill"); Student s2 = new Student("001", "2狗", 20); // 修改 map.put(s2, list2); System.out.println(map);
} |