知识树/Java基础 /集合类
文章平均质量分 83
Java集合类
hughjin
在工作中学习,在学习中成长
展开
-
Java基础-源码分析-集合类源码分析与思路
Java工程师知识树 / Java基础总结下阅读集合类源码的思路:1. 结合JDK的API文档阅读源码JDK1.6软件包 java.util在线中文版APIJDK 1.8 API 帮助文档-中文版百度网盘链接:https://pan.baidu.com/s/1E5Xyw3O1IED02-hBoQbvAw提取码: 969k2. Java集合类阅读源码思路:1.集合类特点比如ArrayList有序可重复,查询快插入删除慢,HashSet不重复线程不完全等.抱有问题去阅读类的源码2原创 2021-01-10 10:18:22 · 143 阅读 · 0 评论 -
Java基础-源码分析-hash 方法
Java工程师知识树 / Java基础不同Hash集合类中的hash方法分析在Map实现类中要找到某个元素,需要根据key的hash值来求得对应数组中的位置。如何计算这个位置就是hash算法。例如:HashMap的数据结构是数组和链表的结合,HashMap里面的元素位置需要尽量的分布均匀些,尽量使得每个位置上的元素数量只有一个,那么当用hash算法求得这个位置的时候,马上就可以知道对应位置的元素,而不用再去遍历链表。总结下HashMap在JDK1.7与1.8,HashTable在JDK1.8,原创 2021-01-10 10:17:34 · 181 阅读 · 0 评论 -
Java基础-源码分析-TreeMap/TreeSet
Java工程师知识树 / Java基础TreeSet的底层是基于TreeMap,所以TreeSet的数据结构就是TreeMap的数据结构,只是TreeSet的每个key对应的value值都为TreeSet的成员变量private static final Object PRESENT = new Object();。不过TreeMap 和TreeSet 实现的接口规范不同。TreeMap特点TreeMap是Map集合的有序实现,其底层是基于红黑树的实现,能够在log(n) 时间内完成 get、原创 2021-01-10 10:15:09 · 162 阅读 · 0 评论 -
Java基础-源码分析-LinkedHashMap/LinkedHashSet
Java工程师知识树 / Java基础LinkedHashMap特点LinkedHashMap 是一个键有序的 HashMap,可以将 LinkedHashMap 理解为 LinkList + HashMap。LinkedHashSet继承自HashSet,源码更少、更简单,唯一的区别是LinkedHashSet内部使用的是LinkHashMap。这样做的好处就是LinkedHashSet中的元素顺序是可以保证的,也就是说遍历序和插入序是一致的。LinkedHashMap 链表长度小于8时数据原创 2021-01-10 10:12:20 · 166 阅读 · 0 评论 -
Java基础-源码分析-HashMap/HashTable/HashSet/LinkedHashSet
Java工程师知识树 / Java基础HashMap/HashTable/HashSet/LinkedHashSet源码上区别概述:HashMap/HashTableHashMap、 Hashtable都是最常见的一些Map实现,是以键值对的形式存储和操作数据的容器类型。主要区别在于Hashtable在方法层面加上了synchronized。HashSet/LinkedHashSet而HashSet的底层是基于HashMap,所以HashSet的数据结构就是HashMap的数据结构,只是Ha原创 2021-01-10 10:08:31 · 196 阅读 · 0 评论 -
Java基础-源码分析-LinkedList
Java工程师知识树 / Java基础LinkedList特点LinkedList底层是通过一个双向链表实现,不是线程安全的。可以被当作双向链表、堆栈、队列或双端队列进行操作。LinkedList结构public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Seriali原创 2021-01-10 10:02:53 · 98 阅读 · 0 评论 -
Java基础-源码分析-ArrayList/Vector
Java工程师知识树 / Java基础首先看下ArrayList的源码分析,Vector与ArrayList区别在与方法层面加上了synchronized。ArrayList特点ArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。底层使用数组实现。ArrayList结构Java继承与实现的接口情况为:public class ArrayList<E> extends AbstractList<E> implemen原创 2021-01-10 10:01:49 · 148 阅读 · 0 评论 -
Java基础-集合比较-集合之间的区别和联系
Java工程师知识树 / Java基础ArrayList/LinkList/Vector的联系ArrayList/LinkList/Vector这三者都是实现集合框架中的List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。ArrayList/LinkList/Vector的区别1 底层实现方式ArrayList内部用数组来实现;LinkedList内部采用双向链表实现;Vector内部用数组实现。原创 2021-01-10 10:00:28 · 495 阅读 · 1 评论 -
Java基础-源码分析-位运算的妙用
Java工程师知识树 / Java基础注意:位运算只用于整数,并且如果超过范围所得值为0。比如8>>4,并不是0.5而是0&:与,且性质:两个数字的个位都是1时,结果是1,否则为0用途:清零:任意整数和整数0做与运算,所有位都是0,得出的结果是0取出指定位:任意位和位1做与运算,结果是不变,例如x=10101110取出低4位,只需要和y=00001111做与运算,就可以得出z=00001110判断奇偶:二进制中,能表示基数,那么二进制的最后一位一定是1错误判断方法原创 2021-01-04 20:43:11 · 204 阅读 · 0 评论 -
Java基础-集合类-集合类排序问题
Java工程师知识树 / Java基础一种情况是集合类本身自带排序功能,如前面说过的TreeSet、SortedSet、SortedMap等,另一种就是本身不带排序功能,我们通过为需要排序的类实现Comparable或者Comparator接口来实现。综述:Comparable和Comparator都是用来实现集合中元素的比较、排序的。Comparable是在集合内部定义的方法实现的排序,位于java.lang下。Comparator是在集合外部实现的排序,位于java.util下。C原创 2021-01-04 20:42:28 · 247 阅读 · 0 评论 -
Java基础-集合类-集合类工具
Java工程师知识树 / Java基础JDK 1.8 API 帮助文档-中文版百度网盘链接:https://pan.baidu.com/s/1E5Xyw3O1IED02-hBoQbvAw提取码: 969kJDK 提供的操作工具类有:集合操作工具: java.util.Collections数组操作工具: java.util.Arrays对象操作工具: java.util.Objects常用到的集合操作工具类有:org.apache.commons.collections对原创 2021-01-04 20:41:43 · 192 阅读 · 2 评论 -
Java基础-集合类-集合遍历
Java工程师知识树 / Java基础遍历方法的实现原理1、传统的for循环遍历,基于计数器的:遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。2、迭代器遍历,Iterator:每一个具体实现的数据集合,一般都需要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。所以基于顺序存储集合的Iterator可以直接按位置访问数据。而基于链式存储集合的Iterator,正常的原创 2021-01-04 20:40:14 · 160 阅读 · 0 评论 -
Java基础-集合类-迭代器
Java工程师知识树 / Java基础任何容器类,都必须有某种方式可以将东西放进去,然后由某种方式将东西取出来。毕竟,存放事物是容器最基本的工作。对于ArrayList,add()是插入对象的方法,而get()是取出元素的方式之一。ArrayList很灵活,可以随时选取任意的元素,或使用不同的下标一次选取多个元素。如果从更高层的角度思考,会发现这里有一个缺点:要使用容器,必须知道其中元素的确切类型。初看起来这没有什么不好的,但是考虑如下情况:如果原本是ArrayList ,但是后来考虑到容器的特点原创 2021-01-04 20:33:21 · 122 阅读 · 0 评论 -
Java基础-集合类-哈希
Java工程师知识树 / Java基础什么是 HashHash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类进行排列。在介绍一些集合时,我们总强调需要重写某个类的 equlas() 方法和 hashCode() 方法,确保唯一性。这里的 hashCode() 表示的是对当前对原创 2021-01-04 20:32:48 · 737 阅读 · 0 评论 -
Java基础-集合类-概述
Java工程师知识树 / Java基础1.为什么要用集合类Java编程思想中指出:通常,程序总是根据运行时才知道的某些条件去创建新对象。在此之前,不会知道所需对象的数量,甚至不知道确切的类型。为解决这个普遍的编程问题,需要在任意时刻和任意位置创建任意数量的对象。所以,就不能依靠创建命名的引用来持有每一个对象:MyType aReference;因为你不知道实际上会需要多少这样的引用。大多数语言都提供某种方法来解决这个基本问题。Java有多种方式保存对象(应该说是对象的引用)。例如前原创 2021-01-04 20:32:11 · 337 阅读 · 0 评论 -
Java基础-集合类-ArrayList retainAll() 方法
一、 retainAll 方法 public boolean retainAll(Collection<?> c) { //调用自己的私有方法 return batchRemove(c, true); }二、batchRemove 方法解析如果此 collection 由于调用而发生更改,则返回 true //集合A比较与集合B的交集 private boolean batchRemove(Collection<?>原创 2020-10-07 18:07:06 · 6516 阅读 · 0 评论 -
Java基础-集合类-数组转List
Java中数组转为List有三种情况.一.最常见方式(未必最佳)通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。关键代码:List list = Arrays.asList(strArray);private void testArrayCastToListError() { String[] strArray = new String[2]; List list = Arrays.asList(strArray原创 2020-10-16 16:05:44 · 183 阅读 · 0 评论