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

引用分类:
强引用:引用指向对象,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等方法,将制定的容器包装成同步的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值