java集合类的clear()方法,能立刻把我集合占用的内存给清掉吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合类的clear()方法,能立刻把我集合占用的内存给清掉吗相关的知识,希望对你有一定的参考价值。

List l = new ArrayList();
l.clear(); 能立刻把我集合占用的内存清理吗

public void clear()
modCount++;
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
tab[i] = null;
size = 0;

里面也是个赋null操作
一执行clear()方法,会立刻把内存释放掉吗?gc 不立刻回收的话,clear()不就没作用了吗?

clear是明确告诉gc要准备收回该对象占用内存,具体收回时间由虚拟机执行回收操作时有效, 参考技术A 不会立即清除,只是告诉GC这段内存可以清除了,至于GC什么时候清除,那就不知道了。 参考技术B 清理内存要GC吧

集合框架,

集合:

数组对映射类的数组无能为力要用map,数组的长度是固定的。

集合类的主要方法:
。添加、删除操作,例如add、addAll、remove、removeAll等
。查询操作,例如size、isEmpty、contains、iterator等。集合操作,例如containsAll、addAll、clear、
removeAll、retainAll等等
。转型操作,例如toArray   

LinkedList类用于创建链表数据结构对象。它继承AbstractSequentialList类并实现了List、Queue接口。
跟ArrayList一样,LinkedList也是实现了List接口,这说明可以根据索引来查询集合内的元素。不过,LinkedList和ArrayList的区别也很明显,由于
LinkedList是实现了双向循环链表,所以元素可以很快捷的被插入或删除,但是,由于链表的特性,如果对LinkedList做查询,那么效率也非常低。
相对与ArrayList来说,基于链表对增加、删除元素的便捷性,LinkedList提供了addFirst、addLast、removeFirst、 removeLast等方法。

话不多说简单的操作代码展示

创建测试类Array

package cn.hp.test11;

public class Array {
    public static void main(String[] args) {
        int[]array=new int[6];
        array[0]=1;
        array[1]=2;
        array[2]=3;
        array[3]=4;
        array[4]=5;
        array[5]=6;
//        array[6]=7;//运行时会异常
        for (int i=0;i<array.length;i++){
            System.out.println(i);
        }
    }
}

创建SetDemo测试类
package cn.hp.test11;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetDemo {

    public static void main(String[] args) {
        Set s= new HashSet();
        s.add("想念");
        s.add("恨");
        s.add("爱");
        s.add("怨");
        System.out.println(s.isEmpty()); //是否空值
        //移除
        s.remove("爱");
       //输出
        Iterator it= s.iterator();
      while (it.hasNext()){
          System.out.println(it.next());
//          s.clear();//清空

      }
    }
}

创建ListDemo测试类:
package cn.hp.test11;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("我想你");
        list.add("我恨你");
        list.add("我爱你");
        list.add("我怨你");
        list.add(list);//将list集合里的元素全部再添加一遍
        //下标
     //   list.remove(2);//移除
       // System.out.println(list.get(2));//下标输出
        System.out.println(list.size());
        System.out.println(list.contains(list));
     //迭代
        Iterator it = list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
    // list.clear();//清空
    }
}
创建LinkedListDemo:
package cn.hp.test11;

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList ll =new LinkedList();
        ll.add("我想你");
        ll.add("我恨你");
        ll.add("我爱你");
        ll.add("我怨你");
        ll.add("我打你");
        ll.addFirst("我打你");
        ll.addLast("我curry你");
        ll.remove();
        Iterator it1 = ll.iterator();
        while (it1.hasNext()){
            System.out.println(it1.next());
        }
    }
}

创建MapDemo测试类:
package cn.hp.test11;

import java.util.*;

public class MapDemo {
    public static void main(String[] args) {
        Map map= new HashMap();
        map.put("1","我爱你");
        map.put("2","我恨你");
        map.put("3","我打你");
        map.put("4","我curry你");
        map.put("5","我想你");

        System.out.println(map.get("2"));
      Set s =  map.keySet();//set是collection的子类所以迭代是Iterator it= c.iterator();
      Collection c= map.values();

      Set  s1= map.entrySet();//键值对输出 1=我爱你····
      Iterator it= s1.iterator();
      while (it.hasNext()){
          System.out.println(it.next());
      }
    }
}

以上是关于java集合类的clear()方法,能立刻把我集合占用的内存给清掉吗的主要内容,如果未能解决你的问题,请参考以下文章

java中如何将list集合清空

java集合

java 基础关于 list 集合问题

集合框架,

java list集合问题

JAVA 集合COLLECTION接口能NEW对象吗 ,接口不是不能实例化对象吗