关于CodeJava的学习笔记——3

一、集合

1、List

(1)ArrayList

        <1>可以同时多线程访问,效率高但是容易出现并发错误(Vector只能单线程,效率低但是不会出现并发)

        <2>基于数组实现,遍历的效率高,添加删除元素效率略低(LinkedList基于双向循环列表实现,对于增删改元素的效率较高,但是遍历时需要永远从下表0开始)

        <3>有序的添加元素,元素不唯一,比如装入"Jim"的名字,可以有重名的人

(2)LinkedList

        <1>LinkedList底层基于双向循环链表实现的
        <2>劣势:随机访问 遍历查找永远需要从下标0查找

2、Set

(1)HashSet

        无序、唯一。该集合是基于哈希表实现的,我们在往hashset中添加对象的时候,需要按顺序比较  hashcode->地址->equals。因此我们往往需要覆盖我们所创建对象的hashcode、equals方法此事在笔记1中亦有记载

(2)TreeSet

        有序 唯一 ,该集合是基于 二叉树实现的,根据comparaTo方法进行比较排序,使用时通常需要覆盖。

3、Map

(1)Map

        Map——键值对,主键唯一、值不唯一、二者一一对应。

(2)HashMap

        HashMap底层基于哈希表实现的 默认分16个小组 每对元素[key=value]应该装进哪一个小组 根据主键的哈希码值决定 当来到某个小组之后如果发现组内有元素 为了保证主键的唯一性 需要拿着新来元素的主键和老元素的主键做hashCode()、 == 、equals()比较。

(3)TreeMap

        TreeMap底层基于二叉树实现的 每对元素[key=value]应该装在左子树/子树 根据主键决定 底层在添加元素的时候 会拿着新来的主键和老元素的主键做compareTo()/compare()比较

4、Collections

针对List集合提供的方法:

        Collections.sort(list集合):按照自然排序 需要泛型必须实现

        Collections.sort(list集合,比较器)按照定制排序

        将参数不安全的ArrayList变成线程安全的List集合

        List<> list = Collections.synchronizedList(ArrayList对象);

针对所有单值集合[List、Set、SortedSet]提供的方法:

        Collections.addAll(单值集合,元素,元素...);一次添加多个元素

        Collections.max(单值集合):自然排序得到集合里面的最后一个元素[最大值 -》 升序]

Map【映射】集合:每次往集合里面一对元素【key=value】

        要求主键唯一 但是值可以重复

        所有Map集合通用的方法

         Collections.max(单值集合,比较器)定制排序得到集合里面的最后一个元素[最大值-》升序]

         Collections.min(单值集合):自然排序得到集合里面的第一个元素[最小值-》升序]

         Collections.min(单值集合,比较器)定制排序得到集合里面的第一个元素[最小值-》升序]

         Collections.frequency(单值集合,查找元素)查找集合里面该元素出现的次数 底层尊equals()

5、方法总结

(1)所有单值集合共有的操作方法

        add(元素)
        remove(元素)
        contains(元素)
        size()
        isEmpty()
        iterator()
        addAll(集合)
        removeAll(集合)
        retainAll(集合)
        clear()

(2)ArrayList

        get(下标)

        set(下标,元素)

        remove(下标)

        indexOf(元素)

        lastIndexOf(元素)

(3)HashSet

        无特有方法

(4)TreeSet

        first() //只拿数值

        pollFirst() //将元素取出来(里面就没有了)

        last() 

        pollLast()

(5)Map

<1>map方法

        map.put("刘德华",500)添加元素

        map1.putAll(map2)将map2集合里面的数据装进map1集合里面 

        map.size()得到集合大小

        map.get("张学良")通过主键获得值对象

        map.containsKey("刘德华")判断存在某个主键对像

        map.containsValue(600)判断存在某个值对象

        map.remove("张学友");通过主键删除

        map.isEmpty()/判断集合是否为空

<2>遍历方法

        Set<主键> set = map.keySet();//遍历后map.get(x)可以得到对象的值

        Collection<> cs = map.values();//只遍历值

        Set<Map.Entry<主键,值>> set = map.entrySet();//x.getKey()        

        //x.getValue()得到值                x.setValue()修改值

<3>HashMap

        containsKey(主键)底层尊重hashCode() == equals()

        ConcurrentHashMap为了追求高效性和安全性 将锁的力度降低
        

<4>TreeMap

        containsKey(主键)底层尊重compareTo()/compare()

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值