Java笔记整理 —— Collections

Collections

方法(均为静态) 

    public static void main(String[] args) {
        List a = new LinkedList();
        a.add("Tom");
        a.add("king");
        a.add("milan");
        Collections.reverse(a);
        System.out.println(a); //[milan, king, Tom]
        Collections.shuffle(a);
        System.out.println(a); //[Tom, king, milan]
        Collections.sort(a);
        System.out.println(a);//[Tom, king, milan] (m>k>T) 用字符串的大小比较
        Collections.sort(a, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return ((String)o1).length()-((String)o2).length(); //按照长度从小到大
            }
        });
        System.out.println(a); //[Tom, king, milan]
        Collections.swap(a,0,2);
        System.out.println(a); //[milan, king, Tom]
    }

 注意一下copy方法参数位置以及内存不足会报错即可。 

    public static void main(String[] args) {
        List a = new LinkedList();
        a.add("Tom");
        a.add("king");
        a.add("milan");
        Object max = Collections.max(a); //返回值是一个Object
        System.out.println(max); //milan 字符串最大
        Object max2 = Collections.max(a, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return ((String)o1).length()-((String)o2).length();
            }
        });
        System.out.println(max2);//milan,长度最大
        System.out.println(Collections.frequency(a,"Tom"));//1
        List b = new LinkedList();
        // Collections.copy(b,a); 报错 这时b还没有内存空间
        //后面是被复制的,根据源码,如果 a.size>b.size 会抛出异常
        for(int i = 0;i<5;i++){
            b.add("");
        }  //扩大b的内存
        Collections.copy(b,a);
        System.out.println(b); //[Tom, king, milan, , ] 剩下俩是""
        Collections.replaceAll(a,"Tom","Jack");
        System.out.println(a); //[Jack, king, milan]
    }

一个关于HashCode的练习题

  当把p1的name改成"CC"时,由于hashCode方法已经改写,因此p1的hash值也因此改变。通过remove的源码得知,删除的原理是根据hash码计算的一个值,因此会计算出p1对应的hash值。但问题是,计算出P1在三号位上(反正不是1号位),但是P1实际上还在一号位,因此删除失败

   加入一个 (1001,"CC")的Person时,根据hashCode计算出安放的位置(当然调用了底层代码,不是直接就是hash值),虽然跟P1hash值完全相同,但是3号位上并没有东西,因此成功安放。

   加入一个 (1001,"AA")的Person时,计算出安放位置为1号位,此时1号位有P1,因此会调用equals方法跟P1进行比较,因为P1已经修改过name了,因此不同,放在P1后面(链表) 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值