Java 中的 List,Set 和 Map 的区别

来源:互联网 发布:java 天气预报接口 编辑:程序博客网 时间:2024/06/07 21:02

在一般招聘的笔试或面试中中或多或少都有有关Java中集合的考察。下面整理一下有关这方面的知识!

List(列表)
List中以线性的方式存储数据,存储的数据可以重复。

List接口的主要实现类有以下两个:

  • ArrayList() : 内部存储结构是数组,由于数组的特性,所以其可以进行随机访问相应的数据,但是插入删除的速度较慢。
  • LinkedList(): 内部存储结构采用的是链表,所以其访问速度较慢,但是相应的插入和删除的速度较快。

Set(集合)
联想到集合的特性可知,其中存储的数据是无序的,如果插入相同的数据则只会保存一个。

Set接口所主要实现的类有两个:

  • HashSet():底层在存取的时候使用的是Hash算法,也就是在存储数据的时候要存入相应的HashCode()。
  • TreeSet():数据存储采用的数据结构是树,能够对存入的数据进行排序。

接下来我们要考虑如下几个问题

Set集合如何保证插入的数据是唯一的呢?
核心就是判断两个对象是否相等

  • 首先判断两个对象的HashCode()是否相等,不相等,则说明两个对象不相等,相等,则进行下一步的判断。
  • 然后使用 equals()方法判断两个对象是否相等,相等,说明两个对象相等,反之则说明两个对象不相等。

Map(映射)
Map中的数据都是以 键值对 的形式存储的,map能将相应的键值对映射起来。
Map接口的实现类主要由一下两个:

  • HashMap():相应的数据结构是Hash表,存储的数据时无序的。线程不安全。键和值都快可以为null

  • TreeMap():相应的数据结构是二叉树,故能保证存储数据的有序性。线程不安全。键不可以为null
    如果存储的键为null会抛出空指针异常。在其put()方面里面有如下代码:

            if (key == null)                throw new NullPointerException();
原创粉丝点击