一、set和list
ArrayList和LinkedList的区别:
ArrayList如何实现扩容:
HashSet添加可变对象造成无法准确访问的例子:
public class TestHashSet {
public static class R
{
private int count;
public R(int count)
{
this.count=count;
}
public String toString()
{
return "R的count属性:"+count;
}
@Override
public int hashCode() {
return count;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
R other = (R) obj;
if (count != other.count)
return false;
return true;
}
}
public static void main(String[] args) {
// ODO 自动生成的方法存根
HashSet hs=new HashSet();
hs.add(new R(-2));
hs.add(new R(-3));
hs.add(new R(5));
hs.add(new R(9));
System.out.println(hs);
//取出第一元素
Iterator it=hs.iterator();
R first=(R)it.next();
//把第一个元素的count属性赋值
first.count=-3;
System.out.println(hs);
//删除count=-3的对象
hs.remove(new R(-3));
System.out.println(hs);
//输出false
System.out.println("hs是否包含count为-3的对象?"+hs.contains(new R(-3)));
//输出false
System.out.println("hs是否包含count为-2的对象?"+hs.contains(new R(-2)));
}
}
引用类别:
我们希望描述这样一类对象:当内存空间还足够时,则能保存在内存之中;如果内存空间在进行垃圾回收后还是非常紧张,则可以抛弃这些对象
强引用:在代码中普遍存在,类式Object obj=new Object()这类的引用,只要强引用还存在,垃圾回收器就永远不会回收掉被引用的对象
软引用:当进行垃圾回收之后,内存空间足够,则能保存在内存之中;不够就抛弃回收
弱引用:无论内存是否足够,垃圾回收器工作时,都会回收
虚引用:目的是在这个对象被GC回收时,收到一个系统通知
WeakHashMap和HashMap:强弱引用之分
如何实现HashMap的同步?
Map m=Collections.synchronizedMap(new HashMap())来达到同步的效果,返回的Map封装了底层的HashMap的所有方法
HashMap、ConcurrenHashMap的区别
http://blog.csdn.net/xuefeng0707/article/details/40834595
使用自定义的Key作为HashMap或HashTable需要注意哪些问题?
由于HashMap的Key是不可以重复的,因此要注意以下几点:
(1)如果想根据对象的相关属性来自定义对象是否相等,就需要重写equals方法,一旦重写了equals方法,那么就必须重写hashCode方法
(2)当自定义类的多项作为HashMap的key时,最好把这个类设计成不可变类
三、工具类Collections
Collections提供了大量的对集合进行排序、查询、修改等操作,还可以将集合对象设置为不可变、对集合对象实现同步控制等方法。