不同业务场景使用不同的map
来源:互联网 发布:ubuntu在线音乐软件 编辑:程序博客网 时间:2024/05/18 02:50
System.out.println("Map当Key一样,后面的value会覆盖前面的value");
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 2);
map.put(1, 3);
System.out.println(map.get(1)); // 3
System.out.println(map.keySet()); //[1]
System.out.println(map.containsValue(2)); //false
System.out.println(map.containsKey(1)); //true
System.out.println("------------------------------");
System.out.println("MultiValueMap 当Key一样,value不一样,不会覆盖");
MultiValueMap map2 = new MultiValueMap();
map2.put(1, 2);
map2.put(1, 3);
System.out.println(map2.get(1)); // [2,3]
System.out.println(map2.keySet()); //[1]
System.out.println(map2.containsValue(2)); //true
System.out.println(map2.containsKey(1)); //true
该程序是一个单线程时间调度程序。
用途:每台机器需要定时执行的程序。比如: 更新本地缓存,更新索引文件,定时数据分析计算,定时发邮件,旺旺等等。
说明:1,需要考虑定时执行的任务在设定时间内是否能顺利完成,否则容易积压任务。
2,需要考虑本地缓存的数据结构的读写同步
private static Map configMap = new ConcurrentHashMap(20);
private ScheduledExecutorService scheduledExecutorService;
public void init() {
reloadCache();
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
// 每隔10分钟自动更新一次
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
reloadCache();
}
}, 1, 10, TimeUnit.MINUTES);
}
private void reloadCache() {
// 需要定时调度的任务,比如: 可以更新本类的静态MAP 等等。
}
将一个普通java对象转换成Map. 一般我们会通过Class对象的getFields()来获取所有属性,然后通过遍历所有属性生成Getter的方法名,通过调用getDeclaredMethod()来获取getter方法,然后invork()得到属性值.
反射的效率很高,但是上述获取getter方法的代价还是比较大.高效的话需要自己对Class的getter方法做cache.
用BeanInfo的方式获取的话,jdk内部实现自动对做过调用的class做了缓存,所以效率更好.
public static Map<String, Object> convertBean(Object bean,
Set<String> excludeProperties) throws IntrospectionException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
Class<?> type = bean.getClass();
Map<String, Object> objMap = new HashMap<String, Object>();
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String propertyName = propertyDescriptor.getName();
if (!"class".equals(propertyName)) {
Method readMethod = propertyDescriptor.getReadMethod();
Object result = readMethod.invoke(bean, new Object[0]);
objMap.put(propertyName, result != null
&& result.getClass().isEnum() ? result.toString()
: result);
}
}
return objMap;
}
- 不同业务场景使用不同的map
- 小创新,不同业务场景使用不同的map
- 不同统计图的使用场景
- 不同的场景使用不同的泛型通配符
- Context:让不同场景使用不同扩展的 Chrome 扩展
- iOS GCD不同场景的使用比较
- spring 不同注解的使用场景
- 不同的应用场景推介使用的OpenCL Paths
- spring+mybatis 根据业务场景访问不同数据库,读写分离
- 企业业务网络场景大不同,企业级路由器选哪种?
- 使用委托,满足不同的场景,开放封闭原则
- 注意 @DateTimeFormat 和@JsonFormat 使用场景的不同
- log4j不同业务逻辑输出到不同的log文件
- logback 根据不同业务打印日志到不同的文件
- logback不同业务的日志打印到不同文件
- map的使用&实现不同单词的计数器
- java的synchronized的使用场景简介以及在不同场景下的差异
- Linux与Windows中map类erase方法实现的不同决定使用的不同
- 博客初创
- 查表法在java程序中的应用
- socket阻塞与非阻塞,同步与异步、I/O模型 .
- Cocos2d-x常用控件使用方式.
- 文件缓存——写与读
- 不同业务场景使用不同的map
- 程序中运行dos命令
- 小应用开发——豆瓣电影数据获取
- 微软2014年4月 实习生招聘机试题 4.most frequent logs
- 单链表逆序
- 时间处理工具类&工作日处理类
- 实现Qt日志功能并输出到文件
- 编写高效的Android代码
- Java之面向对象相关问题集