面试官:如何理解集合中的有序、无序和排序? 您所在的位置:网站首页 有序与无序的图片对比 面试官:如何理解集合中的有序、无序和排序?

面试官:如何理解集合中的有序、无序和排序?

2024-07-11 14:45| 来源: 网络整理| 查看: 265

对于集合我们再熟悉不过了,在面试的过程中,也是必不可少的环节,我们都知道Collection是一个接口,Set,List分别实现了该接口,Map存放是元素是以键值对的形式存放的,并且我们也都知道Set存放的是无序不可重复,List存放的是有序可重复的元素,HashMap是无序的。那当面试官问你是如何理解有序和无序的呢,是不是这个问题太简单,简单以至于不知道怎么回答了?

在我们回答这个问题之前,我们要先搞明白有序和排序的区别: 有序是你要存内容的顺序和在内存中存储的顺序一致,比如使用ArrayList或LinkedList存储(1,4,2,6,7)这一串数字,就按照这串数字本身的顺序进行存储,先存1,再存4,再存2,最后存7,这串数字底层在内存上的顺序是连续的,因为ArrayList的底层数据结构是使用的是数组,LinkedList的底层数据结构是使用的是链表,如果你要取下标为0的元素,就返回1,取下标为3的元素,就返回6。 排序:是按照某个数据类型,比如,仍存入(1,4,2,6,7),本身这些数字是没有顺序,杂乱无章,但是用TreeSet排序的时候,将(1,4,2,6,7)按照从小到大的顺序1,2,4,6,7进行存储,将原有的顺序打乱,按照TreeSet设定的顺序排序,将你输入时的顺序(1,4,2,6,7)和实际存储的顺序(1,2,4,6,7)不一致,这是无序存储。要想实现排序,本身的类要实现Compare或者Comparator接口,重写接口中的方法。才可将类可比较排序。

通过以上的例子,我们可以分析有序排序在内存中的存储位置是,1挨着4,4挨着2,2挨着6,6挨着7,顺序和你输入的顺序一致,TreeSet排序在存储的时候时1挨着2,2挨着4,4挨着6,6挨着7,这是排序。取元素的时候,使用ArrayList或LinkedList取下标为1(也就是第二个元素)的元素会返回4,使用TreeSet取第二个元素返回2。

而HashMap,HashSet是无序,为什么是无序排序呢?是因为HashMap和HashSet底层使用的是散列表数据结构,在存储的时候是根据Key的hash值存储的,Key的hash值决定了该元素存储的位置,和输入时的顺序也是大大不一样,所以无序。取元素的时候也是通过Key的hash值去寻找位置,HashSet本质就是HashMap中的Key,HashMap中的Key要求不可重复,所以HashSet也是不可重复。 总结:List有序,Hash无序,Tree排序 实现了List接口的集合类如 ArrayList有序、LinkedList有序 实现了Set接口的集合类如 HashSet无序,TreeSet排序 实现了Map接口的集合类如 HashMap无序,TreeMap排序



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有