博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA集合体系整理汇总
阅读量:4137 次
发布时间:2019-05-25

本文共 2075 字,大约阅读时间需要 6 分钟。

1.整体体系分为两个体系:

       一个是以Map接口为延伸 

       一个是以Collection接口延伸

1.1:Map接口向下延伸,又分为两大类

    一:HashMap(底层键值对:key:value)(线程不安全,同理效率高)(无序的

    二:HashTable(底层键值对:key:value)(线程安全,同理效率低无序的

    三:TreeMap(底层键值对:key:value)(线程不安全,同理效率高有序的

    键值对 key不可以重复,value可以重复;

    为什么key不可以重复?因为在put存的时候它会存一份这个key的hashcode值,然后进行比较,不相同就存,相同就不存:

public V put(K key, V value) {    return putVal(hash(key), key, value, false, true);}

    HashMap(无序的):

    TreeMap(有序的):使用二叉排序树,插入方法如下,使用二分法插入到应该它在的位置去。需要key一定要有比较的方法,要么插入comparator比较器,要么key对象实现Comparator接口;

do {

parent = t;    cmp = cpr.compare(key, t.key);    if (cmp < 0)        t = t.left;    else if (cmp > 0)        t = t.right;    else        return t.setValue(value);} while (t != null);

        HashMap和HashTable的区别:HashMap线程不安全,HashTable线程安全,同理效率高低,HashMap的value允许为null,HashTable的Key和Value都不允许为null;

    

1.2:Collection接口向下延伸,又分为两大类

        一:List

                1:ArrayList(底层数组)(线程不安全,同理效率高)

                2:Vector(底层数组)(线程安全,和ArrayList差不多,方法前多了个synchronize关键字)

         3:LinkedList(底层链表)(线程不安全,同理效率高)

         List集合都是有序的,为什么有序?因为数组有下标(index),链表有前标后标(next,prev);

         List集合都是允许重复的;

         ArrayList和LinkedList的比较:

            1.ArrayList查询快,增上慢(因为底层是数组,查询根据下标就可以了,增删的话如下:需要cope数组,如下ArrayList删除方法)

public E remove(int index) {    rangeCheck(index);    modCount++;    E oldValue = elementData(index);    int numMoved = size - index - 1;    if (numMoved > 0)        System.arraycopy(elementData, index+1, elementData, index,                         numMoved);    elementData[--size] = null; // clear to let GC do its work    return oldValue;}

                    1.LinkedList查询慢,增删快(因为底层是链表,链表查询需要前面查后面,个人见解是往后增加快,批量删除应该会比ArrayList快点,set方法应该不怎么快,也是进行查询后在进行修改,删除操作是查询当前链块儿的前面的值和后面的值,然后把前面的修改后指向后方,后面的修改为指向前方,也不知说的对不对,没试验过,删除操作具体如下:)

final E element = x.item;final Node
next = x.next;final Node
prev = x.prev;if (prev == null) { first = next;} else { prev.next = next; x.prev = null;}if (next == null) { last = prev;} else { next.prev = prev; x.next = null;}

        二:Set

                1:HashSet底层HashMap(线程不安全,同理效率高

                2:TreeSet(底层TreeMap)(线程不安全,同理效率高

         Set集合都是不允许重复的,因为底层是HashMap,add方法添加的时候实际上是Map添加的一个key:

public boolean add(E e) {    return map.put(e, PRESENT)==null;
}

转载地址:http://avxvi.baihongyu.com/

你可能感兴趣的文章
HDU 4920 Matrix multiplication(简单矩阵相乘+技巧减少Mod次数)
查看>>
HDU 4525 威威猫系列故事——吃鸡腿(水题,合并递推公式就行)
查看>>
HDU 4561 连续最大积
查看>>
HDU 4557 非诚勿扰 (简单模拟)
查看>>
HDU 4550 卡片游戏(贪心+细心)
查看>>
蓝桥杯 算法训练 集合运算
查看>>
蓝桥杯 暗恋 简单搜索或者暴力或者bfs
查看>>
蓝桥杯 拦截导弹 动态规划(最长下降子序列+最长上升子序列)
查看>>
蓝桥杯 方格取数 (多线程DP)
查看>>
蓝桥杯 未名湖边的烦恼 (简单暴力dfs)
查看>>
蓝桥杯 黑白无常 (简单暴力枚举)
查看>>
蓝桥杯 基础练习 2n皇后问题 (简单dfs暴力+优化剪枝)
查看>>
蓝桥杯 基础训练 完美的代价(转)
查看>>
蓝桥杯 算法训练 矩阵乘方(矩阵快速幂取模)
查看>>
蓝桥杯 算法训练 数列
查看>>
蓝桥杯 算法训练 校门外的树 (贪心线段排序)
查看>>
蓝桥杯 算法训练 装箱问题 (DP)
查看>>
蓝桥杯 算法提高 上帝造题五分钟(线段树)
查看>>
蓝桥杯 算法提高 学霸的迷宫(简单bfs+记录路径)
查看>>
蓝桥杯 算法提高 扶老奶奶过街
查看>>