![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
集合
文章平均质量分 52
java集合框架
小布丁value
这个作者很懒,什么都没留下…
展开
-
HashMap默认加载因子为什么选择0.75?(阿里)
HashMap默认加载因子为什么选择0.75?Hashtable 初始容量是11 ,扩容 方式为2N+1;HashMap 初始容量是16,扩容方式为2N;阿里的人突然问我为啥扩容因子是0.75,回来总结了一下; 提高空间利用率和 减少查询成本的折中,主要是泊松分布,0.75的话碰撞最小,HashMap有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动扩容之前可以达到多满的一种度量。当哈希表中的条目数超出了加载因转载 2021-07-23 19:43:12 · 146 阅读 · 0 评论 -
Queue介绍重要复习
Queue介绍public class ProrityQueue { public static void main(String[] args) { PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(10, new Comparator<Integer>() { @Override public int compare(Integ原创 2021-05-12 11:47:55 · 311 阅读 · 0 评论 -
集合练习题new Comparator只能比较对象?
随机生成1万个数据(random)保存下来(数据范围:0~1000) ArraylList1、统计每个数据出现的次数 HashMap2、按照数据出现的次数多少从多往少排序:例如:数字2,出现10次 TreeMap3、将数据按照生成的先后顺序进行打印且数据不能重复 LinkedHashSetpublic class Test { private static ArrayList<Integer> arrayList; public static void main(Str原创 2021-05-12 10:37:41 · 297 阅读 · 0 评论 -
Comparable & Comparator的区别
Comparable & Comparator接口都可以用来实现集合中元素的比较、排序,Comparator位于包java.util下,Comparable位于包java.lang下Comparable接口将比较代码嵌入自身类中Comparator在一个独立的类中实现比较。像Integer、String等这些基本类型的JAVA封装类都已经实现了Comparable接口,这些类对象本身就支持自比较,直接调用Collections.sort()就可以对集合中元素的排序,无需自己去实现Compar原创 2021-05-09 17:22:57 · 1855 阅读 · 0 评论 -
Set接口底层实现
Set接口介绍set接口的实现类:HashSet、LinkedHashSet和TreeSetSet接口特点:数据是不能重复的、最多可以存储一个null值Set接口提供的方法API:HashSet集合hashSet介绍HashSet <String> hashSet = new HashSet <String>(); hashSet.add("语文"); hashSet.add("数学"); hashSet.add("英原创 2021-05-05 18:32:03 · 958 阅读 · 0 评论 -
List接口提供的方法和手动实现迭代器
源码基于1.7基础的数据结构:数组,链表,队列,栈,堆,,主要在存储数据时组织数据存储的方式不同还需要集合?集合底层也是依赖基础数据结构存储数据?存在了基础数据结构还需要集合??1.集合可以动态扩容:数组是用之前需要确定指定数组大小,集合可以动态扩容,只需要关注使用,当容量不足时可以动态扩容(具体可以查看https://editor.csdn.net/md/?articleId=115704258)2.集合提供丰富API接口,方便使用:数组移动(删除,添加)需要自行考虑,集合可以自动移动,提供专有.原创 2021-05-05 17:23:30 · 113 阅读 · 0 评论 -
LinkedHashSet
**Set实现类之二:LinkedHashSetLinkedHashSet是 HashSet的子类 LinkedHashSet根据元素的hashCode值来决定元素的存储位置,但它同时使用双向链表维护元素的次序,这使得元素看起来是以插入顺序保存的。 LinkedHashSet插入性能略低于 HashSet,但在迭代访问Set里的全部元素时有很好的性能。 ●LinkedHashSet不允许集合元素重复。Set实现类之三:TreeSet在这里插入代码 1.向Treeset中添加的数据,要求是相同类原创 2021-05-05 15:03:58 · 6204 阅读 · 0 评论 -
为什么哈希表的结构?
*为什么哈希表的结构?*数组一段连续内存空间查找方便删除/添加需要移动大量的元素*链表非连续内存空间查找相对复杂删除/添加只要知道前一个/居**哈希表综合数组和链表的优点期望做到一个数据结构查找/删除/添加方*使用步骤:*1)通过对象key计算出一个散列码hash*2)通过散列码进行运算确定该对象应该放到哪个位置index*3)直接添加** key. hashCode() & table.length-1 -> index hash (o)算法会导致哈希冲突*解决哈希冲突原创 2021-05-05 15:03:10 · 60 阅读 · 0 评论 -
手动实现HashMap集合
/** 实现HashMap集合* put(key,value)* 1)key-> hash 散列码* 2)hash& table.length-1 ->index* 3)if(table[index]==null{* 直接放* }else{* 找key是否存在,如果存在,新值覆盖旧值* 如果不存在,将key,value封装为一个结点Entry直接添加** }* */class MyHashMap<K,V>{ private Entry<原创 2021-05-05 14:59:51 · 120 阅读 · 0 评论 -
ListHashMap的底层实现以jdk7为例说明
集合概况LinkedHashMap的实现通过LinkedHashMap的定义如下:public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>可以看出其是继承自HashMap ,具有HashMap所有的特征构造函数也是调用HashMap的构造LinkedHashMap是具有HashMap的特征:***包括默认值、扩容机制…***(数组默认长度16,2倍扩容原创 2021-04-24 22:28:51 · 380 阅读 · 0 评论 -
集合框架的概述及 Collection中常用方法
#集合框架的概述及其方法常用方法原创 2021-04-14 11:14:15 · 85 阅读 · 0 评论 -
Collection中 的Iterator迭代器接口遍历集合元素
#Collection中 的Iterator迭代器接口在这里插入代码片public class IneratorTest { /* *Collection中 的Iterator迭代器接口 * */ @Test public void test1() { Collection coll = new ArrayList(); coll.add(123); coll.add(33); coll.add(n原创 2021-04-14 11:44:34 · 114 阅读 · 0 评论 -
Interator中中的remove()方法和foreach 循环遍历元素和底层实现原理
#Interator中中的remove()方法和foreach 循环遍历元素注意点:’‘Tom’’.equals(obj)说明如果interator里面存的是null位置换一下就是空指针异常常见错误说明1.没有调next之前,iterator还在空指针,你删谁1不能remve两次代码运行结果##foreach循环遍历元素需要注意foreach是吧集合对象中的元素赋值给局部变量,然后输出,并没有改变原来集合对象的值。但如果用for循环复制的形式,会改变原来对象的值。..原创 2021-04-14 17:19:31 · 304 阅读 · 0 评论 -
List接口常用实现类ArrayList,LinedList和Vector源码分析
##Collection的子接口之一List接口###面试题ArrayList .LinkedList和Vector的异同###ArrayList源码Jdk 7##jdk82.2 jdk 8中Arraylist的变化:Arraylist list = new ArrayList();//底层object[] elementData初始化为(}.并没有创建长数组:list.add(123);//第一次调用add()时,底层才创建了长度10的数组,并将数据123添加到eLemen原创 2021-04-14 20:41:35 · 107 阅读 · 0 评论 -
hashCode()和equals()的重写。
标题*##HashSet元素添加过程hashCode()和equals()的重写。***一、Set:存储无序的、不可重复的数据Hashset为例说明:一、集合:存储无序的、不可重复的数据Hashset为例说明:*1.无序性:不等于随机性.存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值!2.不可重复性:保证添加的元素按照equals()判断时,不能返回true.即:相同的元素只能添加一个。二、添加元素的过程:以Hashset为例:我们向HashSet中添加元素a,首先调用原创 2021-04-15 07:33:42 · 144 阅读 · 0 评论 -
TreeMap 工作原理及实现
TreeMap 工作原理及实现HashMap不保证数据有序LinkedHashMap保证数据插入有序,要保证map的key可以大小排序,使用TreeMap集合 TreeMap<Integer, String> treeMap = new TreeMap<>(); treeMap.put(4,"qd"); treeMap.put(3,"sd"); treeMap.put(1,"sd"); treeMap.put(5原创 2021-05-05 09:38:02 · 493 阅读 · 0 评论 -
WeakHashMap介绍
WeakHashMap介绍weakhashmap优化jvm,是GC更加智能回收无用的对象。weakhashmap关键是:当一个对象被GC回收时,响应的值对象的引用从map中删除,weakhaskmap能节约存储空间,来实现缓存那些非必要的数据引用类型java中提供的引用类型有4种.强(Strong)引用,软(soft)引用,弱(weak)引用,虚( phantom)引用强(Strong)引用,常使用的引用类型,在创建对象时只要强引用存在,GC永远不会回收被引用的对象,通过new创建转载 2021-05-05 11:12:05 · 568 阅读 · 0 评论 -
Map中的常见方法:
#Map中的常见方法:object put(Object key, object value): 将指定key-value添加到(或修改)当前map对象中void putAll(Map m): 将m中的所有key-value对存放到当前map中objectrem ove(0bject key): 移除指定key的key-value对,并返回valuevoid clear():清空当前map中的所有数据public class CollectionMap { @Test publ原创 2021-04-17 14:17:12 · 558 阅读 · 0 评论 -
HashMap的底层实现原理?jdk7,jdk8
面试题:1. HashMap的底层实现原理?2. HashMap 和 Hashtable的异同?3. currentHashMap 与HashtabLe的异同?(zharauthor shkstartzhanlMap结构的理解1.Map中的key:无序的、不可重复的,使用Set存储所有的key注意:key所在的类要重写equals()和hashcode()(以HashMap为例)2,Map中的value:无序的、可重复的,因为没有特定的方法实现无序,可重复,所以就泛泛的使用collect原创 2021-04-16 14:23:02 · 239 阅读 · 0 评论