为了账号安全,请及时绑定邮箱和手机立即绑定

数据结构-java

标签:
Java

java中的数据结构

常用结构

  1. Collection
       List

  • ArrayList 数组实现

  • Vector   其实就是数组实现的synchronized 版本

public synchronized E remove(int index) {
        modCount++;
        if (index >= elementCount)
            throw new ArrayIndexOutOfBoundsException(index);
        E oldValue = elementData(index);

        int numMoved = elementCount - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--elementCount] = null; // Let gc do its work

        return oldValue;
    }

LinkedList 双向链表 维持头和尾  Node first;/Node last

private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

Set
 HashSet 其内部维护一个HashMap 使用其中key的特性保证唯一性

public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

TreeSet 其内部也维护一个TreeMap

Map

 HashMap 数组+链表(+红黑树java8)
 TreeMap 红黑树 
123

Queen 队列

ArrayBlockingQueue
LinkedBlockingQueue

线程安全的结构

Collections集合工具也提供内部类SynchronizedList/SynchronizedMap 其本质是利用装饰者模式,给原方法加上synchronized 悲观锁

static class SynchronizedList<E>
        extends SynchronizedCollection<E>
        implements List<E> {
      final List<E> list;
      public void add(int index, E element) {
            synchronized (mutex) {list.add(index, element);}
        }
        public E remove(int index) {
            synchronized (mutex) {return list.remove(index);}
        }
}

1.5以后的java.util.concurrent并发包下的提供了线程安全的各种list/map,其利用的是CAS乐观锁
    put时会调用compareAndSwapObject 这是个native方法,而get不会调用

     static final <K,V> boolean casTabAt(Node<K,V>[] tab, int i,
                                        Node<K,V> c, Node<K,V> v) {
        return U.compareAndSwapObject(tab, ((long)i << ASHIFT) + ABASE, c, v);
    }

               

                                               

原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消