List 一定有序,Set不一定无序

首先,我们要明确的一点是,在java中我们通常说的集合有序无序针对的是插入顺序,是指在插入元素时,插入的顺序是否保持,当遍历集合时它是否会按照插入顺序展示。像TreeSet和TreeMap这样的集合主要实现了自动排序,我们称之为排序,而根据前面的定义它不一定是有序的。

所以,在我们常见的集合类型中,有序的有ArrayList,LinkedList,LinkedHashSet,LinkedHashMap等,无序的有HashSet,HashMap,HashTable,TreeSet,TreeMap等,而同时TressSet和TressMap又是可排序的。


1.  List 一定有序


list是有序的,是以数组的存储方式进行存储.也就是说数组什么样它就什么样,唯一的区别就是,它没有固定大小。 且list的检索效率比较高,不过要频繁的对这个容器里的元素进行更新就不要用它了,用linkedlist比较好.
顺序放进去是不会乱的,举个栗子

List<Integer> numList=new ArrayList<>();
numList.add(1);
numList.add(2);

当你取第一个时numList.get(0);(下标从0开始)
打印它出来还是:1
List 接口下ArrayList 特点是: 插入数据 有序且可重复 适合查找多增删少。
list是有序的,是以数组的存储方式进行存储.也就是说数组什么样它就什么样,唯一的区别就是,它没有固定大小. 且list的检索效率比较高,不过要频繁的对这个容器里的元素进行更新就不要用它了,用linkedlist比较好.

2. Set不一定无序


我们经常听说List是有序且重复的, Set 是无序不重复的。这里有个误区,这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序 a-z 排列。 Set 并不是无序的,传统说的
Set 无序是指 HashSet, 它不能保证元素的添加顺序,更不能保证自然顺序,而 Set 的其他实现类是可以实现这两种顺序的。
先来看看一段测试代码:

import java.util.*;

public class CollectionTest {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("s1");
        arrayList.add("s3");
        arrayList.add("s4");
        arrayList.add("s5");
        arrayList.add("s2");
        System.out.println("ArrayList:==========================");
        for (String arrList : arrayList) {
            System.out.print(arrList + " ");
        }
        System.out.println();
        List<String> linkedList = new LinkedList<String>();
        linkedList.add("s1");
        linkedList.add("s3");
        linkedList.add("s4");
        linkedList.add("s5");
        linkedList.add("s2");
        System.out.println("LinkedList:===========================");
        for (String linkList : linkedList) {
            System.out.print(linkList + " ");
        }
        System.out.println();

        Set<String> hashSet = new HashSet<String>();
        hashSet.add("s1");
        hashSet.add("s3");
        hashSet.add("s4");
        hashSet.add("s5");
        hashSet.add("s2");
        System.out.println("HashSet:==============================");
        for (String hashst : hashSet) {
            System.out.print(hashst + " ");
        }
        System.out.println();

        Set<String> linkedHashSet = new LinkedHashSet<String>();
        linkedHashSet.add("s1");
        linkedHashSet.add("s3");
        linkedHashSet.add("s4");
        linkedHashSet.add("s5");
        linkedHashSet.add("s2");
        System.out.println("LinkedHashSet:=========================");
        for (String linkedst : linkedHashSet) {
            System.out.print(linkedst + " ");
        }
        System.out.println();

        Set<String> treeSet = new TreeSet<String>();
        treeSet.add("s1");
        treeSet.add("s3");
        treeSet.add("s4");
        treeSet.add("s5");
        treeSet.add("s2");
        System.out.println("TreeSet:==============================");
        for (String treest : treeSet) {
            System.out.print(treest + " ");
        }
        System.out.println();
    }
}


插入的顺序为 s1 s3 s4 s5 s2 时,运行结果:

ArrayList:==========================
s1 s3 s4 s5 s2 
LinkedList:===========================
s1 s3 s4 s5 s2 
HashSet:==============================
s3 s4 s5 s1 s2 
LinkedHashSet:=========================
s1 s3 s4 s5 s2 
TreeSet:==============================
s1 s2 s3 s4 s5 

Process finished with exit code 0


我们通常说的 List 是有序的指的就是最后集合中的元素顺序就是按照添加时候的顺序排列的(无论是实现类 ArrayList, 还是 LinkedList)。但是我们发现 Set 所谓的无序就是在 HashSet 这个实现类中才会出现的这种情况,而 LinkedHashSet 已经和 List 的结果相同了,再看 TreeSet 实现的功能是根据元素的自然顺序排列了。

下面可以总结一张表格

类型是否可以重复是否保证元素添加的顺序保证元素自然的顺序(A-Z)
List
HashSet
LinkedHashSet\
TreeSet

 

 

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有序数据类型是指元素按照一定的顺序存储和访问的数据类型。在有序数据类型中,元素的位置是有意义的,可以通过索引来访问和操作特定位置的元素。常见的有序数据类型有列表(List)和元组(Tuple)。 列表(List)是一种有序、可变的数据类型,它可以存储任意类型的元素,并且可以通过索引来访问、修改和删除元素。列表中的元素按照添加的顺序进行存储,每个元素都有一个对应的索引值,可以通过索引来准确定位和操作元素。 元组(Tuple)是一种有序、不可变的数据类型,它也可以存储任意类型的元素,并且可以通过索引来访问元素,但不能修改和删除元素。元组中的元素按照添加的顺序进行存储,每个元素同样有一个对应的索引值。 无序数据类型是指元素存储和访问没有固定顺序的数据类型。在无序数据类型中,元素的位置没有特定意义,不能通过索引来访问和操作特定位置的元素。常见的无序数据类型有集合(Set)和字典(Dictionary)。 集合(Set)是一种无序、不重复的数据类型,它可以存储任意类型的元素。集合中的元素是唯一的,重复的元素会被自动去重。集合不支持通过索引来访问元素,但提供了一些方便的方法来进行集合运算,如交集、并集、差集等。 字典(Dictionary)是一种无序的键值对数据类型,它以键值对的形式存储数据。字典中的键必须是唯一的,值可以是任意类型。字典不支持通过索引来访问元素,但可以通过键来访问对应的值,这是字典的一个重要特点。字典提供了丰富的方法来操作和管理键值对数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值