摘要:一、List ArrayList 使用List时,最好初始化容量。 ArrayList的默认容量为10,每次扩容增0.5倍,假如要放置100个元素,需要多次扩容。 List<String> list=new ArrayList<>(100); String数组转List 使用Arrays.asLis
阅读全文
摘要:ArrayList 是一个动态数组,线程不安全 ,允许元素为null。 ArrayList的数据结构是数组,查询比较方便。 ArrayList类的接口 RandomAccess:RandmoAccess是一个标记接口,用于被List相关类实现。他主要的作用表明这个相关类支持快速随机访问。在Array
阅读全文
摘要:HashMap的数据结构 HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,他的底层结构是一个数组,而数组的元素是一个单向链表。HashMap默认初始化的是一个长度为16位的数组,每个数组储存的元素代表的是每一个链表的头结点。在jdk1.8中,当HashMap不断地插入元素,
阅读全文
摘要:ConcurrentHashMap是线程安全的。可以在多线程中对ConcurrentHashMap进行操作。 在jdk1.7中,使用的是锁分段技术Segment。数据结构是数组+链表。 对比jdk1.7,在jdk1.8中,ConcurrentHashMap主要使用了CAS(compareAndSwa
阅读全文
摘要:Java集合的快速失败机制 “fail-fast” "fail-fast"是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生 fail-fast 机制。 例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修
阅读全文
摘要:LinkedList 数据结构是双向链表,插入删除比较方便。LinkedList 是线程不安全的,允许元素为null 。 构造函数: 构造函数是空的。 基本属性: 链表节点: Node<E> 链表节点通过内部类Node<E>表示,这是一个双向链表。既可以从头开始遍历,也可以从尾开始遍历。next是上
阅读全文
摘要:一、hashcode是什么 要理解hashcode首先要理解hash表这个概念 1. 哈希表 hash表也称散列表(Hash table),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数
阅读全文
摘要:一、效率低下的HashTable容器HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。如线程1使用put进
阅读全文
摘要:List 有序可重复 ArrayList ArrayList数据结构是数组。查询快,增删慢。ArrayList是线程不安全的,允许元素为null 。 Vector 线程安全的数组,效率较差,已经过时不用。 LinkedList LinkedList 数据结构是双向链表,插入删除比较方便。Linked
阅读全文
摘要:0.使用工具 使用IDEA查看源码,并安装插件 translation,随时翻译源码中的注释。 注释一定要多看,哪怕是英文的注释也必须看。很多的要点,其实都写在注释里面了!!! 1.查阅资料 可以先查看网络博客,参考前辈的心得体会进行阅读。 2.理清主要流程 先理清整体的架构设计,执行顺序。 比如线
阅读全文
摘要:在java的集合中,List接口继承Collection接口,AbstractList类实现了List接口,在AbstractList中的内部类Itr实现了Iterator接口 ArrayList实现List接口并继承AbstractList类,结构图如下:(图片出自网络) Iterator接口源码
阅读全文
摘要:Map<K,V>是以键-值对存储的(key-value), 而Entry<K,V>是Map中的一个接口,Map.Entry<K,V>接口主要用于获取、比较 key和value. 具体的结构如下: 其中,getKey()用于获取key,而getValue()用于获取value,setValue()用于
阅读全文