您的位置:首页 > 编程语言 > Java开发

Java中的一些类的对比以及容器

2016-01-18 15:12 176 查看
引用分类:

强引用:引用指向对象,gc运行时不回收,例如字符串常量

软引用:gc运行时可能回收(jvm内存不够),用于制作缓存

弱引用:gc运行时立即回收

虚引用:类似无引用,主要跟踪对象被回收的状态,不能单独使用,必须与引用队列联合使用

 

目的:避免对象长时间驻留在内存中,解决垃圾回收机制回收时机的问题

String:不可变字符串类型

StringBuilder:可变字符串类型,非同步,线程不安全,效率高

StringBuffer:可变字符串类型,同步,线程安全,效率低

ArrayList:底层基于数组实现的列表,有序,可重复,线程不安全

LinkedList:底层基于链表实现的列表,有序,可重复,线程不安全

Vector:有序,可重复的列表,线程安全

对于Map的所有子类,其中的键不可重复,所以若要将某个自定义的类作为Map的键,则需要在该类中重写

equals和hashCode方法,其中,equals方法返回的值相同,则hashCode的值必相同,反之不一定成立

HashTable:线程安全,效率低,键与值都不能为空,父类为Dictionary

HashMap:线程不安全,效率低,键最多一个null,值可以为多个null父类为AbstractMap

Properties:用于读取配置文件,键与值都只能为字符串类型

WeakHashMap:用于管理弱应用对象,在垃圾回收之后,WeakHashMap中的弱引用对象将会被回收,用于管理大数据量对象

    例如:

    WeakHashMap<String,String> whm=new WeakHashMap<String,String>();

    whm.put("hello","world");

    whm.put(new String("hi","world"));

    System.gc();

    System.runFinalization();

    System.out.println(whm.size());

    此时输出的值为1,其中的String('hi')将会被回收

IdentityHashMap:其中的键以地址来去重,而不是以hashCode和equals来去重
EnumMap:要求其中的所以键应该为枚举的值

容器同步控制:多线程访问集合的线程安全

1 常用容器 ArrayList HashSet HashMap都是线程不安全的

2 Collections提供synchronizedSet,synchronizedList,synchronizedMap等方法,将制定的容器包装成同步的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java