精华内容
下载资源
问答
  • Java中常见集合常见集合1)说说常见的集合有哪些吧?答:集合有两个基本接口:Collection 和 Map。Collection 接口的子接口有:List 接口、Set 接口和 Queue 接口;List 接口的实现类主要有:ArrayList、LinkedList...

    Java中常见集合,常见集合

    1)说说常见的集合有哪些吧?

    答:集合有两个基本接口:Collection 和 Map。

    Collection 接口的子接口有:List 接口、Set 接口和 Queue 接口;

    List 接口的实现类主要有:ArrayList、LinkedList、Stack 和 Vector;

    Set 接口的实现类主要有:HashSet、TreeSet、LinkedHashSet;

    Queue接口的实现类主要有:PriorityQueue;

    Map 接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap 和 Properties。

    2)HashMap 和 Hashtable 的区别有哪些?(必问)

    答:1. HashMap 没有考虑同步,是线程不安全的;Hashtable 使用了 synchronized 关键字,是线程安全的;

    2. 前者允许空值作为 Key 和 Value;后者不允许空值作为 Key 和 Value。

    3)HashMap 的底层实现你知道吗?

    答:在 Java8 之前,其底层实现是数组 + 链表实现,Java8 使用了数组 + 链表 + 红黑树实现。此时你可以简单的在纸上画图分析:

    317d3321dbab42c331511197b9ff5f86.png

    4)Hashtable 和 ConcurrentHashMap的区别? (必问)

    答:Hashtable 考虑了同步的问题,但是Hashtable 在每次同步执行时都要锁住整个结构。

    ConcurrentHashMap 结合了 HashMap 和 HashTable 二者的优势。ConcurrentHashMap 锁的方式是稍微细粒度的。

    ConcurrentHashMap 将哈希表分为 16 个桶(默认值),诸如 get,put,remove 等常用操作只锁当前需要用到的桶。

    问:ConcurrentHashMap 的具体实现知道吗?

    答:1. 该类包含两个静态内部类 HashEntry 和 Segment;前者用来封装映射表的键值对,后者用来充当锁的角色;

    2. Segment 是一种可重入的锁 ReentrantLock,每个 Segment 守护一个 HashEntry 数组里的元素,当对 HashEntry 数组的数据进行修改时,必须首先获得对应的 Segment 锁。

    相关文章暂无相关文章

    展开全文
  • java 常见集合

    万次阅读 2019-07-17 15:30:12
    集合类存放于Java.util 包中,主要有3 种:set(集)、list(列表包含Queue)和map(映射)。 1. Collection:Collection 是集合List、Set、Queue 的最基本的接口。 2. Iterator:迭代器,可以通过迭代器遍历集合中的...

    一、接口继承关系和实现

    集合类存放于Java.util 包中,主要有3 种:set(集)、list(列表包含Queue)和map(映射)。
    1. Collection:Collection 是集合List、Set、Queue 的最基本的接口。
    2. Iterator:迭代器,可以通过迭代器遍历集合中的数据
    3. Map:是映射表的基础接口

     

    二、List

    Java 的List 是非常常用的数据类型。List 是有序的Collection。Java List 一共三个实现类:
    分别是ArrayList、Vector 和LinkedList。

       2.1 ArrayList (数组)

         ArrayList 是最常用的List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

     2.2 Vector(数组实现、线程同步)

    Vector 与ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList 慢。

    2.3 LinkList(链表)

    LinkedList 是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

    三、set

    Set 注重独一无二的性质,该体系集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。对象的相等性本质是对象hashCode 值(java 是依据对象的内存地址计算出的此序号)判断的,如果想要让两个不同的对象视为相等的,就必须覆Object 的hashCode 方法和equals 方法。

    3.1 HashSetHash 表)

    哈希表边存放的是哈希值。HashSet 存储元素的顺序并不是按照存入时的顺序(和List 显然不同) 而是按照哈希值来存的所以取数据也是按照哈希值取得。元素的哈希值是通过元素的hashcode 方法来获取的, HashSet 首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals 方法 如果 equls 结果为true ,HashSet 就视为同一个元素。如果equals 为false 就不是同一个元素。
    哈希值相同equals 为false 的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中)。也就是哈希一样的存一列。如图1 表示hashCode 值不相同的情况;图2 表示hashCode 值相同,但equals 不相同的情况。

    HashSet 通过hashCode 值来确定元素在内存中的位置。一个hashCode 位置上可以存放多个元素。

    3.2 TreeSet(二叉树)

    1. TreeSet()是使用二叉树的原理对新add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。
    2. Integer 和String 对象都可以进行默认的TreeSet 排序,而自定义类的对象是不可以的,自己定义的类必须实现Comparable 接口,并且覆写相应的compareTo()函数,才可以正常使用。
    3. 在覆写compare()函数时,要返回相应的值才能使TreeSet 按照一定的规则来排序
    4. 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

    3.3 LinkHashSetHashSet+LinkedHashMap

    对于LinkedHashSet 而言, 它继承与HashSet 、又基于LinkedHashMap 来实现的。LinkedHashSet 底层使用LinkedHashMap 来保存所有元素,它继承与HashSet,其所有的方法操作上又与HashSet 相同,因此LinkedHashSet 的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构造器,底层构造一个LinkedHashMap 来实现,在相关操作上与父类HashSet 的操作相同,直接调用父类HashSet 的方法即可。

    四、Map

    4.1 HashMap(数组+链表+红黑树)

    HashMap 根据键的hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为null,允许多条记录的值为null。HashMap 非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections 的synchronizedMap 方法使
    HashMap 具有线程安全的能力,或者使用ConcurrentHashMap。我们用下面这张图来介绍HashMap 的结构。

    Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。
    根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。

    4.2 ConcurrentHashMap

    Segment 段
    ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个segment。
    线程安全(
    Segment 继承 ReentrantLock 加锁)
    简单理解就是,ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全。

    Java8 对 ConcurrentHashMap 进行了比较大的改动,Java8 也引入了红黑树。

    4.3 HashTable(线程安全)
    Hashtable 是遗留类,很多映射的常用功能与HashMap 类似,不同的是它承自Dictionary 类,并且是线程安全的,任一时间只有一个线程能写Hashtable,并发性不如ConcurrentHashMap,因为ConcurrentHashMap 引入了分段锁。Hashtable 不建议在新代码中使用,不需要线程安全的场合可以用HashMap 替换,需要线程安全的场合可以用ConcurrentHashMap 替换。
    4.4. TreeMap(可排序)
    TreeMap 实现SortedMap 接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap 时,得到的记录是排过序的。如果使用排序的映射,建议使用TreeMap。在使用TreeMap 时,key 必须实现Comparable 接口或者在构造TreeMap 传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException 类型的异常。

    4.5. LinkHashMap(记录插入顺序)
     LinkedHashMap 是HashMap 的一个子类,保存了记录的插入顺序,在用Iterator 遍历
    LinkedHashMap 时,先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序。

     

    展开全文
  • 常见集合知识和面试题
  • 一般来说,集合表现形式为set 集合和列表非常相似,今天就给大家详细介绍下python常见集合代码。 使用{}来创建集合 set1 = {2, ‘ab’} print(set1) #运行结果 》》》{2, ‘ab’} #创建空集合, 需要用到set() s = {...

    在这里插入图片描述

    一般来说,集合表现形式为set 集合和列表非常相似,今天就给大家详细介绍下python常见集合代码。

    使用{}来创建集合
    set1 = {2, ‘ab’}
    print(set1)
    #运行结果 》》》{2, ‘ab’}
    #创建空集合, 需要用到set()
    s = {}
    print(type(s))
    #运行结果 》》》<class ‘dict’>

    s = set()
    print(type(s))
    #运行结果 》》》<class ‘set’>
    #集合只能存储不可变对象
    set1 = {2, ‘ab’, [1, 2, 3]}
    print(set1, type(set1))
    #上述代码一运行就会报错,因为集合只能存储不可变对象,列表是可变对象
    #集合中存储的对象是无序的
    set2 = {6, 8, 9}
    print(set2)
    #运行结果 》》》{8, 9, 6}

    以上就是关于python常见集合代码的全部内容了,希望能够给大家带来帮助。
    文章部分内容源于网络,联系侵删*
    文章转自:http://h.jiguangdaili.com/news/93367.html

    展开全文
  • 常见集合的特点

    2018-12-06 00:28:05
    首先上图说话,通过图片最直观的了解集合体系 ...常见集合的特点 Collection:无序,不唯一 直接接口List 有序,不唯一,允许有Null值 List接口直接实现类: vector(已淘汰)  底层实现是数组,...

    首先上图说话,通过图片最直观的了解集合体系

    简略版  (其中虚线为接口,实线为接口实线类)

    详细版       (其中虚线为接口,实线为接口实线类)

    常见集合的特点

    Collection:无序,不唯一

    直接接口List 有序,不唯一,允许有Null值

    List接口直接实现类:     vector(已淘汰)

                              底层实现是数组,有序,不唯一,允许有null值,既然是数组,那就是查询修改快,增删慢,线程同步,安全;

                               ArrayList

                             底层实现是数组,有序,不唯一,允许有null值,同样具有数组的特点,查询修改快,增加删除慢,线程异步,不安全;

                              LinkedList

                             底层实现是链表,有序,不唯一,允许有null值,既然是链表,那就是增删快,查改慢,线程异步,不安全;

    直接接口set 无序,唯一,最多允许一个NULL值;

    set接口直接实现类   hashset

                                     底层实现为hashmap(下面会提到),无序,唯一,最多允许一个NULL值,操作数据块,线程同步,不安全;

    因为其中元素唯一,有序所以元素需要重写hashcode()方法与equals()方法

                                                     hashset直接子类  LinkedHashSet 

                                                                                  底层实现为LinkedHashMap 有序,唯一,最多允许一个NULL值,操作数据块,线程同步,安全;

                                      treeset

                                     底层实现为TreeMap,注意这里是有序,唯一,不允许有NULL值,操作数据快,线程异步,不安全,集合中元素需要实现比较器

    Map  从上图可以看出  Map和Collection都是继承了  Iterable接口  

    Key-value键值对,无序,key唯一,最多允许有一个null值,value不唯一,允许有null值

    直接实现类hashtable(已淘汰),注意这里是实现类

                       底层为散列表即 哈希表,无序,不允许有NULL值,操作数据快,线程同步,安全,(注意这里是线程同步)key需重写

    hashcode()跟equals()是方法

    直接实现类hashmap

                         底层也是哈希表,无序,key唯一,最多允许一个空值,values不唯一,允许有NULL值,操作数据快,

    线程异步,不安全,key值需要重写hashcode()方法和equals()方法

                                        hashmap直接子类linkedhahsmap    

                                                                    底层为链表,有序(注意这里是有序)key唯一,最多允许一个NULL值

                                                                       value不唯一,允许有NULL值,操作数据快,线程异步,不安全;

      Map直接实现子类treemap

                                    底层为红黑树,有序,唯一,key唯一,不允许有NULL值,value不唯一,允许有NULL值

    操作数据快,线程异步,不安全。key需实现比较器

                    

     

    展开全文
  • Java常见集合框架

    2017-09-25 11:24:33
    Java常见集合框架:Collection( List、Set、Queue<E> 均继承它) 和 Map, V>介绍
  • Java 中常见集合集合这方面的考察相当多,这部分是面试中必考的知识点。01. 说说常见的集合有哪些吧?答:Map 接口和 Collection 接口是所有集合框架的父接口:1. Collection 接口的子接口包括:Set 接口和 List ...
  • Java常见集合一览表

    2017-06-11 21:35:59
    Java中集合种类多,功能以及特性各异,为了便于记忆和使用,花了一些时间制作了一种Java常见集合一览表。 Java常见集合一览表 集合 接口/类 K/E V 是否线程安全 说明 Collection 接口 N...
  • java常见 集合

    2016-03-05 15:02:17
    java 常见数据集合
  • 这份代码用 C++ 的模板类实现了一个集合类 Set,其 API 参考借鉴了 STL 中的 vector 类,采用动态内存及链表进行元素管理,并实现了一些常见集合算法:并集、交集,也实现了随机下标的存取。
  • 常见集合框架,高级for循环,Enumeration接口常见集合框架增强for循环(高级for循环)Enumeration接口 常见集合框架 ArrayList:数组结构。查询快,可重复。可实现增删改查。 LinkedList:链表结构。增删块。 HashSet...
  • java常见集合类型ArrayList介绍本文介绍一种常见的集合:ArrayList。本文的集合指java.util包下一,基本介绍 ArrayList是List接口的一个实现类,大小可变数组。基本实现写法为:List<String> list=new ArrayList()...
  • Java常见集合的默认大小及扩容机制: 文章连接
  • 集合类 github csv 是为处理 csv 而开源的 java 工具 有时候对象中会包含数组MapCollection 等常见集合 为了存储的便利性默认提供集合的相关支持 特性和普通字段保持一致如果指定注解转换则以注解为准 使用示例 ...
  • Java基础之常见集合的比较序言:最近因为要找实习工作,所以就把Java集合中中常见的面试考点整理了一下ArrayList和LinkedList的区别ArrayList和Vector使用了数组的实现,可以认为ArrayList或者Vector封装了对内部...
  • 面试题(二):Java中常见集合

    千次阅读 2018-06-02 11:37:30
    Java 中常见集合 集合这方面的考察相当多,这部分是面试中必考的知识点。01. 说说常见的集合有哪些吧?答:Map 接口和 Collection 接口是所有集合框架的父接口:1. Collection 接口的子接口包括:Set 接口和 List ...
  • 笔试题总结——常见集合对象的线程安全   线程安全(Thread-safe)的集合对象:    Vector    HashTable    StringBuffer   非线程安全的集合对象    ArrayList    LinkedList    HashMap  ...
  • 有时候对象中会包含数组、Map、Collection 等常见集合。 为了存储的便利性,默认提供集合的相关支持。 特性和普通字段保持一致,如果指定注解转换,则以注解为准。 使用示例 UserCollection.java 用于演示集合的...
  • 自己总结了一些java常见集合的循环输出方式,特别是在来跟踪集合中的数据到底有没有传到你想要的地方。迭代器循环输出法不是很常用。一、List集合的循环输出List<Object> objList = new ArrayList<Object&...
  • Java中的三种常见集合List、Set、Map 数组长度是固定的,在需要一个不固定的长度的"数组"存储数据时,集合就出现了 集合的特点 可存放不同类型的对象(必须是对象) 数组只能存放同一类型数据,但是可以存放基本类型...
  • 专题总结:常见集合的循环输出方式 Java 2009-12-27 17:14:42 阅读172 评论0 字号:大中小 订阅 一、List集合的循环输出 List objList = new ArrayList();  1) for (int i=0; i  {  // 循环输出...
  • ubuntu常见集合

    2016-11-15 08:55:44
    一、ubuntu 网络没法连接,输入以下命令检查网卡状态 sudo lshw -numeric -class network如果出现 *network disable 输入以下命令激活网卡: sudo service network-manager restart
  • Java常见集合知识详解

    2018-06-12 18:47:21
    集合的种类 常见集合类分如下几个种类: Collection - List - ArrayList - LinkedList - Set - HashSet - TreeSet Map - HashMap - TreeMap Collection 详解 Collection接口是List和S...
  • Java中关于Hash的三类常见集合实现类 说到hash,顺带一提:java中String.hashCode()方法的算法如下:str.charAt(0) * 31n-1 + str.charAt(1) * 31n-2 + ... + str.charAt(n-1) 这个算法肯定是有可能碰撞的,由于测试...
  • Hibernate常见集合映射(Set,List_Array,Map,Bag)
  • java常见集合面试题

    2019-03-13 09:26:22
    对于Java来说集合是普遍存在的,也是面试经常问到的,所以对于这些问题,我整理了一些常用的Java集合问题。 一、Iterator为什么接口没有具体的实现? Iterator接口定义了遍历集合的方法,但它的实现则是集合实现类的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,622
精华内容 8,248
关键字:

常见集合