![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java集合
文章平均质量分 69
CodingALife
这个作者很懒,什么都没留下…
展开
-
Java基础类(十六):json-lib
·原创 2022-03-21 23:14:26 · 1010 阅读 · 0 评论 -
Java集合(十一): LinkedHashMap远源码剖析
1、2、原创 2021-10-11 13:29:30 · 838 阅读 · 0 评论 -
Java集合(十): 集合遍历
1、直接打印集合对象1.1、打印 list 对象List<Integer> list2 = Arrays.asList(1,2,3);System.out.println(list2); // 打印出 [1, 2, 3]System.out.println(list2.toString()); // 打印出 [1, 2, 3]运行原理:1、打印的是list.toString(),根据“编译看左面,运行看右面”,运行期方法的动态分派,所以执行的是ArrayList类的to..原创 2021-09-22 21:15:43 · 785 阅读 · 0 评论 -
Java集合(九): Iterator迭代器执行原理
目录1、Iterator1.1、iterator原理1.2、说明2、遍历list、set、map2.1、遍历List2.2、遍历Set2.3、遍历Map1、Iterator1.1、iterator原理首先,当集合获取到迭代器也就是执行coll.iterator()之后,获得的iterator对象是指向集合之外的空白的地方,iterator.hasNext()判断当前位置下一个是否含有元素,返回类型是Boolean类型,...原创 2021-09-22 19:46:16 · 832 阅读 · 0 评论 -
Java集合(八): Collection集合方法详解
目录1、Collection方法1.1、方法概述1.2、方法详解1.3、Collection的toArray()方法2、Collection特性1、Collection方法1.1、方法概述Collection作为集合顶层接口,主要包含增(add())、删(remove)、查(iterator)、包(contains)、空(isEmpty)、数(size())、清(clear)等方法。注意:Collection中没有修改方法,修改方法需要索引,是在List中实现的。原创 2021-09-20 18:40:39 · 866 阅读 · 0 评论 -
Java集合(七): 并发包集合ConcurrentHashMap
Java并发包concurrent——ConcurrentHashMapJava并发包concurrent——ConcurrentHashMap_上善若水的木偶戏-CSDN博客原创 2021-09-21 02:41:00 · 231 阅读 · 0 评论 -
Java集合(六一): ConcurrentHashMap问题汇总
1、jdk1.7升级到1.8,ConcurrentHashMap的变化?锁方面: 由分段锁(Segment继承自ReentrantLock)升级为 CAS+synchronized实现; 数据结构层面: 将Segment变为了Node,减小了锁粒度,使每个Node独立,由原来默认的并发度16变成了每个Node都独立,提高了并发度; hash冲突: 1.7中发生hash冲突采用链表存储,1.8中先使用链表存储,后面满足条件后会转换为红黑树来优化查询; 查询复杂度: jdk1.7中链表查询复杂度为..原创 2021-09-25 11:38:55 · 975 阅读 · 0 评论 -
Java集合(六): ConcurrentHashMap源码剖析
1、ConcurrentHashMap简介2、CHM数据结构当链表节点较少时仍然是以链表存在,当链表节点较多时(大于8)会转为红黑树3、CHM源码分析3.1、CHM继承结构和层次关系 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { } 3...转载 2021-09-24 23:15:53 · 1012 阅读 · 0 评论 -
Java集合(六): Java集合容器面试题
Java集合容器面试题(2020最新版)Java集合容器面试题(2020最新版)_ThinkWon的博客-CSDN博客_java 容器原创 2021-09-19 21:53:47 · 145 阅读 · 0 评论 -
Java集合(五四): Map详解、常用方法
目录1、map集合概述2、map的存储结构3、总结一下map的一些特点4、map的实现类4.1 HashMap4.2 Hashtable4.3 ConcurrentHashMap4.4 linkedHashMap4.5 TreeMap5、map常用方法6、java8为Map新增的方法getOrDefaultforEachputIfAbsentremove(key,value)replace(K key, V value)replace(K原创 2020-11-28 20:54:19 · 1103 阅读 · 2 评论 -
Java集合(五三):HashMap问题汇总
1、散列表后面跟的“链表、红黑树”是怎么来的,解决哪些问题? ①链表的由来:Hash碰撞:不同的元素通过hash算法可能会得到相同的hash值,如果都放同一个桶里,后面放进去的就会覆盖前面放的,所以为了解决hash碰撞时元素被覆盖的问题,就有了在桶里放链表。 ②红黑树的由来:假设现在HashMap集合中大多数的元素都放到了同一个桶里(由hash值计算而得的桶的位置相同),那么这些元素就在这个桶后面连成了链表。现在需要查询某个元素,那么此时的查询效率就很慢了,它是在做链表查询(O(N)的查询效...原创 2021-09-24 17:36:48 · 302 阅读 · 0 评论 -
Java集合(五三):comparableClassFor、compareComparables、tieBreakOrder方法解读
目录一、概述二、方法解析一、概述在之前的文章里已经分析过,在发生hash碰撞(多个key的hash值相同)的时候,hashMap首先会采用链表进行存储,当链表节点数量达到一定阈值(8)会将链表上的节点再组织成一棵红黑树。红黑树是一种二叉树,每个父节点可以由左右两个节点。当put一个新元素时,如果该元素键的hash值小于当前节点的hash值的时候,就会作为当前节点的左节点;hash值大于当前节点hash值得时候作为当前节点的右节点。那么hash值相同的时候呢?这时还是会先尝...转载 2021-09-24 17:05:56 · 319 阅读 · 0 评论 -
Java集合(五二): comparableClassFor(Object x)方法解读
目录1、comparableClassFor(Object x)方法解读1.1、方法说明1.2、instanceof1.3、getClass()1.4、getGenericInterfaces()1.5、getGenericSuperclass()和getSuperclass()1.6、ParameterizedType1.7、getRawType()1.8、getActualTypeArguments1.9、getOwnerType()2、总结1、com转载 2021-09-23 18:21:55 · 390 阅读 · 0 评论 -
Java集合(五): HashMap源码剖析
dd转载 2021-09-19 21:39:26 · 216 阅读 · 0 评论 -
Java集合(四一):BlockingQueue
1、阻塞队列 调度器调度线程池执行任务,生产者生产任务,消费者消费任务,那么这时就需要一个任务队列,生产者向队列里插入任务,消费者从队列里提取任务执行,调度器里是通过BlockingQueue实现的队列,随后小查一下,下面看看BlockingQueue的原理及其方法。 多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享。假设我们有若干生产者线程,另外又有若干个消费者线程。如果生产者线程需要把准备好的数据...转载 2021-07-24 17:14:21 · 207 阅读 · 0 评论 -
Java集合(四): Queue源码剖析
一、Queue实现Java中的Queue的实现有三种方式:阻塞队列 非阻塞队列 双向队列1、阻塞队列(5)2、非阻塞队列(2)3、双端队列(3)2、二、Queue分类1、普通队列2、优先队列3、延迟队列4、有届队列5、无界队列5、其他队列三、Queue常用方法...原创 2021-09-01 22:54:23 · 911 阅读 · 0 评论 -
Java集合(四二):PriorityQueue
一、优先级队列 PriorityQueuePriorityQueue 类在 Java 1.5 中引入。PriorityQueue 是基于优先堆的一个无界队列,是Queue接口的一个队列实现类,但它的排序并不是典型的队列式先进先出(FIFO)的方式。PriorityQueue的排序方式分为两种,一种是自然排序,这是按照加入元素的大小从小到大排序的。第二种是定制排序,是使用comparator类来重写compare(Object o1,Object o2)方法来实现定制排序的。但是这些都不是关键,关原创 2021-04-18 15:26:15 · 252 阅读 · 0 评论 -
Java集合(三): Set源码剖析
dd原创 2021-09-19 21:38:46 · 95 阅读 · 0 评论 -
Java集合(四三): ArrayDeque
ArrayDeque是 Deque接口的一个实现,使用了可变数组,所以没有容量上的限制。同时, ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用。ArrayDeque是 Deque的实现类,可以作为栈来使用,效率高于 Stack;也可以作为队列来使用,效率高于 LinkedList。需要注意的是, ArrayDeque不支持 null值。一、常用方法 1.添加元素addFirst(E e)在数组前面添加元素addLa...原创 2021-04-18 14:58:38 · 15379 阅读 · 0 评论 -
Java集合(二二): LinkedList源码剖析
点点滴滴原创 2021-09-19 21:36:27 · 245 阅读 · 0 评论 -
Java集合(二一): ArrayList源码剖析
大顶堆原创 2021-09-19 21:35:56 · 305 阅读 · 0 评论 -
Java集合(二): List 源码剖析/初始化
cddd原创 2021-09-19 21:34:24 · 149 阅读 · 0 评论 -
Java集合(一二): Map、List、Set方法
Java--集合大全List,Set,Map超详细讲解_Kevin.wang-CSDN博客_list、set、mapList、Map、Set集合的特点及常用方法_越来越好ing的博客-CSDN博客原创 2021-10-09 13:30:20 · 87 阅读 · 0 评论 -
Java集合(一): 集合框架梳理
1、详细关系图原文:https://blog.csdn.net/u010887744/article/details/505757352、集合类简介原文:http://www.justdojava.com/2019/09/16/java-collection-1/Java 集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。从 Java 5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型,使得编码更加简洁、健壮。Java 集合大致可以原创 2021-04-18 18:21:10 · 517 阅读 · 0 评论 -
Java并发基础(11):等效不可变对象CopyOnWriteArrayList
写在前面不可变类:是指一个对象一经创建就不再改变。 等效不可变对象:对象基本符合不可变对象的一些特征,但是某些情况下内部状态可能会改变1、非线程安全ListCollecrtion 集合中的ArrayList、LinkedList2、线程安全 ListCollecrtion 接口中的 Vector和Stack,位于java.util包 Collections 类中的SynchronizedList,位于java.util包 concurrent 包中的Copy...原创 2021-09-20 23:53:12 · 271 阅读 · 0 评论 -
Map初始化方式
1、必须手动添加所有元素但是,你可以使用static初始值设定项: Map<String, String> myMap; static { myMap = new HashMap<String, String>(); myMap.put("a","b"); myMap.put("c","d"); }}2、最常见的方式(新建Map对象) private static final Map<String, String>.原创 2021-08-08 16:05:45 · 7011 阅读 · 0 评论 -
Java中的栈Stack、Queue、ArrayDeque、LinkedList
1、Stack类Java中Stack类从Vector类继承,底层是用数组实现的线程安全的栈。栈是一种后进先出(LIFO)的容器,常用的操作push/pop/peek。不过Java中用来表达栈的功能(push/pop/peek),更适用的是使用双端队列接口Deque,并用实现类ArrayDeque/LinkedList来进行初始化。2、Stack初始化Deque<Integer> stack = new ArrayDeque<>();Deque<Integer转载 2021-07-24 21:59:42 · 712 阅读 · 0 评论 -
判断集合和map是否为空
之前一直以为判断集合和map都是用CollectionUtils即可,实际上不然。1、CollectionUtils判断集合是否为空CollectionUtils工具类的常用方法:例1: 判断集合是否为空: CollectionUtils.isEmpty(null): true CollectionUtils.isEmpty(new ArrayList()): true CollectionUtils.isEmpty({a,b}): false例2: 判断集合是否不为空:原创 2021-05-15 20:45:56 · 13730 阅读 · 0 评论 -
List、Set、Map排序详解
首先,了解一下Comparator和Comparable通常,要对一个存储在集合内的实体类进行排序时,有两种策略:1. 实体类实现Comparable接口;2. 创建集合时指定Comparator,即实现Comparator接口;区别:称实现Comparable的实体类是可排序的,而Comparator则称为比较器。下面使用具体的代码来使用这两个接口(按照使用的集合分别进行讲解)一、ListList中存储的是Integer等数据类型的话,直接使用Collections.sort(List<原创 2021-04-18 21:48:42 · 327 阅读 · 0 评论 -
HashMap、LinkedHashMap、TreeMap详细说明
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。HashMapHashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null。 HashMap不支持线程的同步(即任一时刻可以有多个线程同时写HashMap),可能会导致数据的不一致。如果需要同步,可以用 Collections的syn原创 2021-04-18 20:50:13 · 823 阅读 · 0 评论 -
HashSet、LinkedHashSet、TreeSet区别
如果你需要一个访问快速的Set,你应该使用HashSet;当你需要一个排序的Set,你应该使用TreeSet;当你需要记录下插入时的顺序时,你应该使用LinedHashSet。HashSet是采用hash表来实现的。其中的元素没有按顺序排列,add()、remove()以及contains()等方法都是复杂度为O(1)的方法。TreeSet是采用树结构实现(红黑树算法)。元素是按顺序进行排列,但是add()、remove()以及contains()等方法都是复杂度为O(log (n))的方法。它还提原创 2021-04-18 20:20:52 · 2895 阅读 · 0 评论 -
Java集合(四四):用Deque代替Vector和Stack
1、官网不推荐Vector和Stack官网已经不推荐使用,一般和list相关的操作都使用ArrayList和LinkedList2、Vector和ArrayList区别同:两者都是数组实现,操作基本一样。异:vector是线程安全的,vector类中大多数方法都使用synchronized关键字修饰,所以性能上vector差很多。Vector的空间扩容是一倍,内存不可复用,而ArrayList是一半 。Vector分配内存是连续的存储空间. arrayList是线程不安...原创 2021-04-18 12:33:57 · 740 阅读 · 0 评论 -
Java集合(五五):Map 的排序问题
需求:存储一个key为Integer,value为String的map,需要根据String的长度对map从小到大进行排序结果:1、用Pair配对一开始用的是HashMap,但是后面发现HashMap是无序的,于是想把HashMap的一个键值对取出来,存到集合里,再对集合进行自定义排序,上网搜到有一个配对的类Pair,他有一个key和一个value属性,想到用来代替HashMap的一个键值对。用ArrayList代替HashMap,然后ArrayList中的元素为配对类,变相实现转载 2020-11-28 22:11:15 · 498 阅读 · 0 评论 -
Map里面的键和值可以为空吗
在Java中,Map里面的键和值可以为空吗?我们先来看一个例子:private static void TestHashMap() { // TODO Auto-generated method stub Map<Integer, String> map = new HashMap<Integer, String>(); map.put(0, "0"); map.put(1, null); map.put(null, "2");转载 2020-11-28 21:21:02 · 5391 阅读 · 0 评论 -
String,StringBuffer, StringBuilder类的常用方法
一、String类的常用方法1.获取: 1)获取字符串str长度 int i = str.length(); 2)根据位置(index)获取字符 char c = str.charAt(index); 3)获取字符在字符串中的位置 int i =st...转载 2019-04-05 22:32:36 · 562 阅读 · 0 评论 -
Java中关于nextInt()、next()和nextLine()的理解
先看解释:nextInt(): it only reads the int value,nextInt() places thecursor in the same lineafter reading the input.next():read the input only till the space. It can't read two words separated by s...转载 2019-04-05 22:17:09 · 538 阅读 · 0 评论