package com.heilong.map;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
/*
* 双例集合
* --------|Map 如果实现了Map接口的集合类,具备的特点:存储的数据都是以键值对的形式存在的,键不可重复,值可以重复
* ------------|HashMap 底层也是基于哈希表实现
* ------------|TreeMap TreeMap是基于红黑树数据结构实现的 特点:会对元素的键进行排序存储
* ------------|HashTable
*
* HashMap的存储原理:
* 往HashMap添加元素的时候,首先会调用键的hashCode方法得到元素的哈希码值,然后经过运算就可以算出该元素在哈希表中的存储位置
* 情况1:如果算出的位置没有任何元素存储,那么该元素可以直接添加到哈希表中
* 情况2:如果算出的位置目前已经存在其他的元素,那么还会调用该元素的equals方法与这个位置上的元素进行比较,
* 如果equals方法返回的是false,那么该元素允许被存储,如果equals方法返回的是true,那么该元素被视为重复元素,不允许存储
*
* TreeMap存储注意事项:
* 1.往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就会按照键的自然顺序进行排序存储
* 2.往TreeMap添加元素的时候,如果元素的键不具备自然顺序的特性,那么键所属的类必须要实现Comparable接口,把键的比较规则定义在ComparaeTo方法内
* 3.往TreeMap添加元素的时候,如果元素的键不具备自然顺序的特性,键所属的类必须也没有实现Comparable接口,那么就必须在创建TreeMap对象的时候传入比较器
*
* */
class Emp implements Comparable<Emp>{
String name;
int salary;
public Emp(String name, int salary){
super();
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return "[姓名:" + this.name + " 薪水:" + this.salary + "]";
}
@Override
public int compareTo(Emp o) {
return this.salary-o.salary;
}
}
class MyComparator implements Comparator<Emp>{
@Override
public int compare(Emp e1, Emp e2) {
return e1.salary-e2.salary;
}
}
public class map {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "一");
map.put("2", "二");
map.put("3", "三");
map.put("4", "四");
System.out.println("方式一:");
//迭代方式一:使用keySet方法进行遍历 缺点:只返回了所有的键,没有值
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()){
String key = it.next();
System.out.println("键:" + key + " 值:" + map.get(key));
}
System.out.println("方式二:");
//迭代方式二:使用values方法进行遍历 缺点:只返回了所有的值,
Collection<String> c = map.values();
Iterator<String> it2 = c.iterator();
while(it2.hasNext()){
System.out.println("值:" + it2.next());
}
System.out.println("方式三:");
Set<Entry<String, String>> entrys = map.entrySet();
Iterator<Entry<String, String>> it3 = entrys.iterator();
while(it3.hasNext()){
Entry<String, String> entry = it3.next();
System.out.println("键:" + entry.getKey() + " 值:" + entry.getValue());
}
System.out.println("----------------------------------------------------------------------");
MyComparator myComparator = new MyComparator();
TreeMap<Emp, String> treeMap = new TreeMap<Emp, String>(myComparator);
treeMap.put(new Emp("张三", 200), "001");
treeMap.put(new Emp("李四", 100), "002");
treeMap.put(new Emp("王五", 300), "003");
treeMap.put(new Emp("赵六", 500), "004");
System.out.println(treeMap);
}
}
Java Map集合解析
最新推荐文章于 2023-10-29 23:16:31 发布
本文介绍了Java中的双例集合,重点比较了HashMap和TreeMap的区别,包括存储原理、遍历方式以及TreeMap的自定义排序。通过实例演示了如何使用MyComparator进行TreeMap的排序操作。
917

被折叠的 条评论
为什么被折叠?



