List是按照元素的添加顺序来存储对象的,因此是有序的。他的实现类ArrayList、LinkedList、Vector都是有序的。
Map、Set集合存放是无序的,原因:
① Map是无序的,它的存储结构是哈希表<key,value>键值对,map中插入元素是根据key计算出的哈希值来存储元素的,因此不是按照元素的添加顺序来存储对象的,故Map是无序的。它的实现类有:HashMap、TableMap和TreeMap。
② Set是无序的,set中的元素不能重复。set的底层实现其实是Map,通过计算key的哈希值来确定元素在数组中的存放位置,所以是无序的,在Map中key的值不能重复,故set中的元素不能重复。它的实现类有:haseSet、TreeSet。
LinkedHashSet和LinkedHashMap等集合却有序,原因:
① LinkedHashMap是有序的,hashMap用来保证存储的值键值对,list用来保证插入的顺序和存储的顺序一致, LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。
② LinkedHashSet是有序的,其中haseSet用来保证数据唯一,List用来保证插入的顺序和存储的顺序一致。LinkedHashSet和LinkedHashMap在Java里也有着相同的实现,前者仅仅是对后者做了一层包装,也就是说LinkedHashSet里面有一个LinkedHashMap(适配器模式)。