集合

来源:互联网 发布:mac 移动硬盘 win7 编辑:程序博客网 时间:2024/05/21 12:45

一、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;}@Overridepublic int hashCode() {return count;}@Overridepublic 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);//输出falseSystem.out.println("hs是否包含count为-3的对象?"+hs.contains(new R(-3)));//输出falseSystem.out.println("hs是否包含count为-2的对象?"+hs.contains(new R(-2)));}}


二、map


引用类别:

我们希望描述这样一类对象:当内存空间还足够时,则能保存在内存之中;如果内存空间在进行垃圾回收后还是非常紧张,则可以抛弃这些对象

强引用:在代码中普遍存在,类式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提供了大量的对集合进行排序、查询、修改等操作,还可以将集合对象设置为不可变、对集合对象实现同步控制等方法。

0 0
原创粉丝点击