treemap

Java两种集合框架

ぐ巨炮叔叔 提交于 2020-11-10 03:42:08
接口 Java集合Collction接口和Map接口 Collection接口 Map接口 ** Java集合Collction接口和Map接口 ** 1.Java集合就好比一个容器,它可以储存任何类型的数据。 在Java中,集合类通常存在于Java.util包中。 2.Java集合主要由两大体系构成,分别是: Collection体系 Map体系 其中:Collection体系和Map体系分别是两大体系中的顶层接口。 3.Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(列队)。 有序可重复:List、Queue 无序不可重复:Set Collection接口 List有序,可重复 1.ArrayList 优点:底层数据结构是数组,查询快,增删慢。 缺点:线程不安全,但是效率高。 2.Vector 优点:底层数据结构是数组,查询快,增删慢。 缺点:线程安全,效率低 3.LinkedList 优点:底层数据结构是数组,查询慢,增删块。 缺点:线程不安全,效率高 Set无序,唯一 1.HashSet 底层数据结构是哈希表。(无序,唯一) 如何来保证元素唯一性? 依赖两个方法:hashCode()和equals() 2.LinkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一) Ⅰ.由链表保证元素有序 Ⅱ

Java学习笔记之集合

狂风中的少年 提交于 2020-11-02 05:32:37
概述: List , Set, Map都是接口,前两个继承至Collection接口, Map为独立接口, 2, Set下有HashSet,LinkedHashSet,TreeSet 3,List下有ArrayList,Vector,LinkedList 4, Map下有Hashtable,LinkedHashMap,HashMap,TreeMap 5,Collection接口下还有个Queue接口,有PriorityQueue类 注意: 1,Queue接口与List、Set同一级别,都是继承了Collection接口。 2, 看图你会发现,LinkedList既可以实现Queue接口,也可以实现List接口.只不过呢, LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限 (即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。 3,SortedSet是个接口,它里面的(只有TreeSet这一个实现可用)中的元素一定是有序的。 Connection接口: ======================================== ArrayList(1) 有序,可重复 初始容量10 加载因子 1 扩容1

妹妹问我:Dubbo集群容错负载均衡

情到浓时终转凉″ 提交于 2020-10-31 10:27:16
前言 相信经过前面几篇之后,大家已经对 Dubbo 整体流程已经清晰了,包括服务是如何暴露的,服务是什么时候注册到注册中心的,以及服务是怎么引入的,服务整体的调用过程等等。 不过还有一个很重要的点没有深入的讲过,就是 Dubbo 的集群容错功能。 线上的服务肯定都是集群部署的,至少得来个两台,互相做 backup,那么问题来了,服务消费者要选用哪一台提供者进行调用呢?调用失败了怎么办呢? 这时候集群容错功能就派上用场了,今天咱们就来深入分析一波 Dubbo 的集群容错。 invoker 是什么? 其实这个在之前就说过了,今天再来复习一遍,因为真的很关键。 在 Dubbo 中 invoker 其实就是一个具有调用功能的对象,在服务暴露端封装的就是真实的服务实现,把真实的服务实现封装一下变成一个 invoker。 在服务引入端就是从注册中心得到服务提供者的配置信息,然后一条配置信息对应封装成一个 invoker,这个 invoker 就具备远程调用能力,当然要是走的是 injvm 协议那真实走的还是本地的调用。 然后还有个 ClusterInvoker ,它也是个 invoker ,它封装了服务引入生成的 invoker 们,赋予其集群容错等能力,这个 invoker 就是暴露给消费者调用的 invoker。 所以说 Dubbo 就是搞了个统一模型,将能 调用的服务的对象都封装成

妹妹问我:Dubbo集群容错负载均衡

我只是一个虾纸丫 提交于 2020-10-31 09:57:59
前言 相信经过前面几篇之后,大家已经对 Dubbo 整体流程已经清晰了,包括服务是如何暴露的,服务是什么时候注册到注册中心的,以及服务是怎么引入的,服务整体的调用过程等等。 不过还有一个很重要的点没有深入的讲过,就是 Dubbo 的集群容错功能。 线上的服务肯定都是集群部署的,至少得来个两台,互相做 backup,那么问题来了,服务消费者要选用哪一台提供者进行调用呢?调用失败了怎么办呢? 这时候集群容错功能就派上用场了,今天咱们就来深入分析一波 Dubbo 的集群容错。 invoker 是什么? 其实这个在之前就说过了,今天再来复习一遍,因为真的很关键。 在 Dubbo 中 invoker 其实就是一个具有调用功能的对象,在服务暴露端封装的就是真实的服务实现,把真实的服务实现封装一下变成一个 invoker。 在服务引入端就是从注册中心得到服务提供者的配置信息,然后一条配置信息对应封装成一个 invoker,这个 invoker 就具备远程调用能力,当然要是走的是 injvm 协议那真实走的还是本地的调用。 然后还有个 ClusterInvoker ,它也是个 invoker ,它封装了服务引入生成的 invoker 们,赋予其集群容错等能力,这个 invoker 就是暴露给消费者调用的 invoker。 所以说 Dubbo 就是搞了个统一模型,将能调用的服务的对象都封装成

你离BAT之间,只差这一套Java面试题。

て烟熏妆下的殇ゞ 提交于 2020-10-30 09:14:17
你离BAT之间,只差这一套Java面试题。 点击上方“Hollis”关注我,精彩内容第一时间呈现。 全文字数: 5500 阅读时间: 10分钟 最近,各大公司开始了春招,很多人已经开始在准备面试了,特地来总结下初中级程序员应该掌握的面试题目。这篇面试指南,只适用于初中级程序员,其中不涉及分布式等问题。关于中高级的程序员问题,我后面可能再出一篇文章。 对于一个初中级程序员来说,面试问题不仅仅涉及到Java语言,还会包括很多其他知识,比如计算机基础知识(数据结构、计算机网络、操作系统等)、C语言基础、Java底层知识以及一些框架相关知识等。本文几乎覆盖到了所有领域。 ❈ 计算机基础知识 C语言基础 Java基础 Java高级 Java Web 设计模式 知识的综合能力 工具使用 项目相关 技术热情 表达能力 思考方式 其他 推荐阅读 ❈ 还有,我知道很多人会问关于这些题目的答案问题。答案我都有,由于篇幅有限没办法直接贴上来。这些题目的答案我会在我的公众号及知识星球中给出,感谢关注。 我总结的这套题目,总数是280道,道道都是精品必考题。如果这些面试题都能很好的回答上的话,参加国内各大公司的校招基本都没啥问题。 我很难估算一个人要掌握这所有的题目有多难。但是我觉得,如果你是一个有一定的计算机基础知识并且有一定的Java经验。比如一个学习还不错的大三学生

java集合之Map

怎甘沉沦 提交于 2020-10-30 08:58:39
1. Map集合之基础增删查等功能 1 public class Demo1_Map { 2 3 /* 4 * Map集合是以键值对的形式存在,底层依赖的是set集合 5 * 6 * a. 添加功能 7 * V put(K key, V value) 8 * 如果键是第一次存入,则就直接存储元素,返回null (其实本质是和键存在是一样的,只是覆盖的null) 9 * 如果键不是第一次存入,就用值把以前的替换掉,返回以前的值 10 * b. 删除功能 11 * void clear() 移除所有的键值信息 12 * V remove(Object key) 删除指定键对应的元素值,并把值返回,当所传的键值不存在时就返回null 13 * c. 判断功能 14 * boolean containsKey(Object key) 判断集合中是否包含此键 15 * boolean containsValue(Object value) 判断集合是否包含指定的值 16 * boolean isEmpty() 判断集是否为空 17 * d. 获取功能 18 * Set<Map.Entry<K,V>> entrySet() 19 * V get(Object key) 根据键获取值 20 * Set<K> keySet() 获取集合中所有键的集合 21 * Collection<V>

Java集合

流过昼夜 提交于 2020-10-30 08:07:13
前提科普: 深拷贝/ 浅拷贝 有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。 加载因子 加载因子是表示Hsah表中元素的填满的程度.若:加载因子越大,填满的元素越多,好处是,空间利用率高了,但:冲突的机会加大了. 反之,加载因子越小,填满的元素越少,好处是:冲突的机会减小了,但:空间浪费多了. 冲突的机会越大,则查找的成本越高.反之,查找的成本越小.因而,查找时间就越小. 因此,必须在 "冲突的机会"与"空间利用率"之间寻找一种平衡与折衷. 这种平衡与折衷本质上是数据结构中有名的"时-空"矛盾的平衡与折衷. 一、继承层次图 二、List 使用方法说明 List 元素有序 可重复 允许null 1 ArrayList 方法说明(线程不安全) 1.1 方法 1 // 构造器 2 4 构造一个具有指定初始容量的空列表。 5 public ArrayList( int initialCapacity) 6 7 构造一个初始容量为 10 的空列表。 8 public ArrayList() 9 10 构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 11 public ArrayList(Collection<?

JAVA工程师-蚂蚁金服电话面试

懵懂的女人 提交于 2020-10-30 01:44:23
   今天5点半接到一个杭州的电话,是蚂蚁金服打来的,当时心里一阵发慌,由于还在上班,就和面试官约定6点下班之后再来。挂完电话,心里忐忑的不行,感觉自己这也没准备好,那也没准备好。剩下半个小时完全没有心思再工作了,把常问的HashMap,concurrentHashMap底层看了一下,算是临时抱佛脚吧。一下班,就收拾出发在公司楼下找了个地方等面试电话。    没一会儿,电话如期而至。先是聊了下大概情况,然后聊了下工作经历。叫我挑选一个自己觉得掌握的最好的项目开始发问。    最开始问了你觉得项目中最难的地方,自己因为毕业了一直在小公司,也没有感觉遇到特别困难的地方,憋了半天憋不出来。面试官也放弃了,直接问,项目中用到Map集合吧,用到过哪些Map。自己就说了个最熟悉的HashMap。但是面试官好像不太想问这个,又问有没有用到过排好序的Map,当时自己脑子短路了,没想到TreeMap是排序的,当时竟然一时想不出有排好序的Map,就说了没有排好序的Map,但是可以实现Compareble接口来实现排序。肯定面试官也很无语,这送分题都不会啊!然后又问HashMap put方法的时间复杂度,我说因为HashMap底层是数组加链表实现的,如果没有hash碰撞时间复杂度就是O(1),有碰撞最坏情况就是O(n)。然后看到我建立上有写线程池,就问了下创建线程池的具体参数的含义,这个没啥难的

java常见集合

自闭症网瘾萝莉.ら 提交于 2020-10-29 18:28:34
集合与数组区别 1-从长度来讲:   数组:需要固定长度。   集合:长度可以改变,可以根据保存的数据进行扩容。 2-从存储内容上:   数组:可以存储基本类型数据,还可以存储引用类型的数据(比如:String 和 对象)。   集合:只能存储引用类型的数据(基本数据类型的封装类),也就是说集合只能存储类的对象。 3-从存储类型上:   数组:只能存储相同类型的数据。   集合:可以存储不同类型的数据,集合中可以存储任意类型的引用数据类型。 集合层次结构 – Collection 接口 List :有序的(存入和取出顺序一致),可重复的,允许有多个 null     – ArrayList//Vector (不经常使用,已过时,被ArrayList取代)         Vector 是同步的,线程安全的,效率较低; ArrayList 是不同步的,线程不安全,但效率高。     Vector 缺省情况下,自动增长为原来的一倍空间; ArrayList 缺省情况下,自动增长为原来的一半。     – LinkedList Set :无序 ( 存入和取出顺序不一致 ) ,不重复的,只允许有一个 null     – HashSet     – TreeSet正在 – Map接口 HashMap / Hashtable Properties TreeMap

深度分享:面试阿里,字节跳动,美团90%会被问到的HashMap知识

谁说胖子不能爱 提交于 2020-10-29 04:45:52
一,HashTable 哈希表,它相比于hashMap结构简单点,它没有涉及红黑树,直接使用链表的方式解决哈希冲突。 我们看它的字段,和hashMap差不多,使用table存放元素 private transient Entry < ? , ? > [ ] table ; private transient int count ; private int threshold ; private float loadFactor ; private transient int modCount = 0 ; 它没有常量字段,默认值是在构造方法里面直接体现的,我们看一下无参构造: public Hashtable ( ) { this ( 11 , 0.75f ) ; } 1.get()方法 根据key获得value public synchronized V get ( Object key ) { Entry < ? , ? > tab [ ] = table ; //计算下标 int hash = key . hashCode ( ) ; int index = ( hash & 0x7FFFFFFF ) % tab . length ; //遍历查找,e=e.next for ( Entry < ? , ? > e = tab [ index ] ; e != null ; e