• Java集合整理


    1.常见的集合有哪些:

    Map接口和Collection接口是所有集合框架的父接口

    List接口的实现类主要有:ArrayList、LinkedList、Vector、Stack(Vector的子类)等

    Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet(HashSet的子类)等

    Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等

    2.List、Set和Map接口的特点

    1)Set表示数学意义上的集合概念,所以其主要特点是集合中的元素不能重复,存储时无序

    2)List称为有序的collection。它按对象进入的顺序保存对象,同时,它可以保存重复的对象

    3)Map用于保存键值对,其中value可以重复,但键不能重复

    3.ArrayList、Vector和LinkedList的联系和区别?

    ArrayList和Vector都是基于存储元素的Obeject[] array来实现的,它们会在内存中开辟一块连续的空间来存储,

    由于数据存储时连续的,所以支持用下标来访问元素,索引数据的速度比较快

    但是在插入元素时需要移动容器中的元素,因此对数据的插入操作执行得较慢

    区别:1)同步性:ArrayList的方法都是不同步的,而Vector的绝大多数方法(如add、insert、remove、set、equals、hashcode等)

    都是直接或间接同步的,所以Vector是线程安全的,ArrayList不是线程安全的(正是由于Vector提供了线程安全的机制,其性能上要稍逊于ArrayList)

    2)扩容大小:Vector默认扩充为原来的2倍(每次扩充空间的大小是可以设置的),ArrayList默认扩充为原来的1.5倍(没有提供方法来设置空间扩充的大小)

    LinkedList是采用双向列表来实现的,对数据的索引需要从列表头开始遍历,因此随机访问效率较低,但是插入元素不需要对

    数据进行移动,因此插入效率较高。同时,它是非线程安全的容器

    扩展:当增删操作在末尾来操作(remove()和add()方法),此时ArrayList不需要移动数组元素,所以效率比LinkedList要高

    当对数据的操作主要为指定位置的插入或删除时,使用LinkedList效率比较高

    4.HashMap、HashTable的区别

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

    2)HashMap允许null作为Key和Value;HashTable key和value都不能为null

    3)HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 

    4)hash值的使用不同,HashTable直接使用对象的hashCode,HashMap重新计算hash值

    5)hash数组默认大小不同,HashMap中,hash数组的默认大小时16,扩容时增加为原来的2倍,HashTable中默认大小是11,增加

    方式为原来的2倍加1.

    6)遍历方式不同。Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 

    5.HashMap是如何实现key唯一的

    在HashMap的put方法实现中首先利用了hash()生成key的hashCode,生成一个hash值h1,如果这个h1在HashMap中不存在,那么直接将<key,value>添加
    到HashMap中;如果这个值已经存在,那就会找出来HashMap中所有hash值为h1的key,然后分别调用key的equals()方法判断当前谈价的key值是否与
    已经存在的key值相同,如果equals()方法返回true,HashMap会使用新的value值来覆盖掉旧的value值,如果equals()方法返回false,说明新增加的key
    在HashMap中不存在,因此会在HashMap中创建新的映射关系
    哈希冲突:不同的key值有相同的hash值

    6.Java中HashMap的key值要是为类对象则该类需要满足什么条件?

    需要同时重写该类的hashCode()方法和它的equals()方法

    7.如何实现HashMap的同步

    可以通过Map m=Collections.synchronizedMap(new HashMap())来达到同步的效果

    8.Collection和Collections的区别

    1)Collection是一个集合接口,继承它的接口为List和Set

    2)Collections是针对集合类的一个包装类,提供了一系列的静态方法实现对集合的搜索、查找、同步等操作

  • 相关阅读:
    LightOJ1074(spfa+dfs标记负环及负环能够到达的点)
    (模板)AC自动机模板
    poj3660(floyd最短路)
    (模板)hdoj2544(最短路--bellman-ford算法&&spfa算法)
    hdoj4099(字典树+高精度)
    poj1056(字符串判断是否存在一个字符串是另一个字符串的前缀)
    hdoj1247(字典树)
    poj3630||hdoj1671(字典树)
    (模板)hdoj1251(字典树模板题)
    poj3348(求凸包面积)
  • 原文地址:https://www.cnblogs.com/wutongshu-master/p/10964812.html
Copyright © 2020-2023  润新知