Map、List集合类的清空使用clear还是重新new呢

2019-03-25 13:46|来源: 网路

各位有经验的Javaer,请问使用Map、List这种集合类做缓存时,需要 每天清空一次数据,那么我是用集合自带的 clear方法好呢,还是直接重新 new一个新的集合,让原来的集合等待gc释放好呢?如果有这方面经验的朋友说说各种方法的利弊,以及企业中 常用的解决方案

问题补充:
silentJesse 写道
量大的时候用clear好 ,量小的时候都可以
用new 的话相对比较会耗资源,因为map也是事实上也是用数组的,当map的容易也就是capacity不够时,会自动扩大到原来的capacity*负载因子,这时就需要搬数据了,即从原来的小数组搬到原来的大数组上,这是很耗资源的


那如果我new的时候直接new一个原大的,是不是可以?
主要我考虑clear也比较好资源,我看它的实现也是轮询吧
而且还有一个并发问题,如果正在clear的时候,这个map又要被用,是不是会有问题?
直接new会比较快速吧,只是占用内存了,等gc后应该就会把原来的内存回收掉

问题补充:
左手写爱丶 写道
答案可参考
http://****.blog.163.com/
免费JavaEE系统架构师培训公开课

广告不能这么发吧...

问题补充:
silentJesse 写道
如果原来的cache很大,再new一个一样大的。。也可能溢出..

我觉得new一个等大的所占内存不会一样吧。比如原来map里有1000个字符串,每个字符串100个字,现在new一个size=1000的Map,但是里面没有字符串数据,Cache应该比原来小多了

问题补充:
283676162 写道
大量数据你用迭代吗....

此话何意...

相关问答

更多
  • 常用的集合类有一下几种: List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的集合类:HashSet类,TreeSet类 Queue结构的集合:Queue接口 HashMap和Hashtable的区别: HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点 以下是他们的区别: 1.历史原因: Hashtable是基于陈旧的Dictionary类 ...
  • dbutils query怎么返回list带map的集合 queryForList返回的通常是一个list对象,那么可以通过泛型的形式来进行List定义的,如: List list = this.queryForList(sql); name = list.get(0).getName(); 这样就可以获取到list对象中的User对象和对应的对象值了。
  • 1.该方法用于向集合列表中添加对象。 语法1 用于在列表的尾部插入指定元素。如果List集合对象由于调用add方法而发生更改,则返回 true;否则返回false。add(E e) e:要添加到列表中的元素。 示例:使用List接口的实现类ArrayList初始化一个列表对象,然后调用add方法向该列表中添加数据。 2.public static void main(String[] args) { List list=new ArrayList (); list.add("保护环境"); //向列表中添加 ...
  • Map map=new HashMap();//实例化map对象 map.put("key","value");//存放值(值以键(key)-值(value)方式存放。) System.out.print(map.get("key").toString());//取值 根据键就可以取到值
  • 很难在没有基准的情况下知道,但是如果您的ArrayList中有很多项目,并且平均大小较低,那么制作新的ArrayList可能会更快。 http://www.docjar.com/html/api/java/util/ArrayList.java.html public void clear() { modCount++; // Let gc do its work for (int i = 0; i < size; i++) elementData[i] = nul ...
  • 复杂的问题 让我们看看发生了什么。 您实例化一个新的实例,它支持新的数组。 所以,垃圾收集器应该清除上一张地图中的所有键和值,并清除自身的引用。 所以O(n)算法无论如何都执行,但在垃圾收集器线程中。 对于1000条记录,您将看不到任何区别。 但。 性能指南告诉您,如果可以,最好不要创建新对象。 所以我会用clear()方法。 无论如何,尝试两种变体,并尝试测量。 总是测量! Complicated question. Let's see what happens. You instantiate a ne ...
  • typedef std::map > mymaptype; mymaptype mymap; for (mymaptype::const_iterator ... typedef std::map > mymaptype; mymaptype mymap; for (mymaptype::const_iterator ...
  • 您可以在列表中为每个循环添加相同的字典INSTANCE。 只有当你清除字典时,每个人都会被清空 要解决此问题,您需要将其添加到您的周期中 while (dataReader.Read()) { // at every loop, create a new instance of dictionary using the same variable Dictionary selectResult = new Dictionary
  • 首先,我会将地图的创建放在循环中,以便每次都添加新地图。 List> rowForSheet = new ArrayList>(); for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) { row = sheet.getRow(j); if (j == 0) {// the first row is title titleRow = row ...