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

对于集合我们再熟悉不过了,在面试的过程中,也是必不可少的环节,我们都知道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排序

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值