Java集合有哪些?区别是什么?使用场景

Java集合有哪些?区别是什么?使用场景?

今天我们简单聊一聊Java中的集合,Java中的集合有List,Set,Map。List和Set有着很多的相似之处,都是存储单例数据的集合,父接口都是Collection。List是有序的值允许重复,每次插入数据,不是把对象本身存储到集合中,而是在集合中用一个索引变量指向这个对象。Set是无序的不允许有重复的值出现。Map集合是存储双列数据的集合,存储的数据是无序的,键不可以重复,值可以重复。接下来详细的说说LIst,Set,Map。

1. List集合

  1. ArrayList:
    底层数据结构是数组,查询快,增删慢,查询是根据数组下标直接查询速度快,增删需要移动后边的元素和扩容,速度慢。线程不安全,效率高

  2. LinkedList:
    底层数据结构是链表,查询慢,增删快,查询需要遍历数组,速度慢,增删只需要增加或删除一个链接即可,速度快,线程不安全,效率高

  3. Vector:
    底层数据结构是数组,查询快,增删慢,线程安全,效率低

2.Set集合

  1. Hashset:
    底层数据结构是哈希表,是根据哈希算法来存取对象的,存取速度快,当Hashset中元素个数超过数组大小(默认值位0.75)时,会进行近似两倍的扩容,哈希表依赖两个方法hashcode()和equals()方法,方法的执行顺序,判断hashcode值是否相同,是:执行equals方法看其返回值,true:说明元素重复不添加,false:直接添加到集合,hashcode值不相同直接添加到集合。

  2. LinkedHashset:
    底层数据结构是链表和哈希表,由链表保证元素有序,由哈希表保证元素的唯一

  3. Treeset
    底层数据结构是红黑树(唯一,有序)由自然排序和比较器排序保证有序,根据返回值是否是0判断元素是否唯一

3.Map集合

  1. HashMap:
    HashMap是基于散列表实现的,其插入和查询的的开销是固定的,可以通过构造器设置容量和负载因子来调整容器的性能,线程不安全,效率低

  2. TreeSet:
    基于红黑树实现,查看时,它们会被排序,TreeMap是唯一带有subMap()方法的Map,subMap()方法可以返回一个子树。

  3. LInkedHashMap:
    类似于HashMap,但是迭代遍历它时,取得的顺序是其插入次序,或者是最近最少使用(LRU)的次序。

4.Map取键值的两种方法

  1. 第一个,使用keySet方法,获得key的set,然后遍历set,就可以获得所有的value
  2. 第二个,使用entrySet方法,获得map中的所有键值对的一个视图,遍历就可获得所有的key、value

你可能感兴趣的:(Java小白的成长之路,java)