java中List和Set比较

本文详细解析了Java集合类的特性,包括List、Set的不同类型及其操作特点。通过具体代码示例,展示了ArrayList、LinkedList的高效随机访问与快速插入删除,以及HashSet、LinkedHashSet、TreeSet在元素唯一性和排序上的差异。

1. List以特定顺序保存一组元素(按插入顺序保存)

  • ArrayList :插入移除元素慢,随机访问快
  • LinkedList:插入移除元素快,随机访问慢,顺序访问快

2. Set保存一组元素,不能重复(唯一性)

  • HashSet :无顺序,速度快
  • LinkedHashSet: 按插入顺序
  • TreeSet: 按比较结果的升序
   /*向容器中添加元素*/
    public static Collection fill(Collection<String> collection){
        collection.add("aa");
        collection.add("bb");
        collection.add("ff");
        collection.add("cc");
        collection.add("qq");
        collection.add("qq");
        return collection;
    }

    public static void main(String[] args){
        System.out.println("ArrayList:     " + fill(new ArrayList<>()));
        System.out.println("LinkedList:    " + fill(new LinkedList<>()));
        System.out.println();
        System.out.println("HashSet:       " + fill(new HashSet<>()));
        System.out.println("LinkedHashSet: " + fill(new LinkedHashSet<>()));
        System.out.println("TreeSet:       " + fill(new TreeSet<>()));
    }

输出结果如下:

ArrayList:     [aa, bb, ff, cc, qq, qq]
LinkedList:    [aa, bb, ff, cc, qq, qq]

HashSet:       [aa, bb, ff, cc, qq]
LinkedHashSet: [aa, bb, ff, cc, qq]
TreeSet:       [aa, bb, cc, ff, qq]
Java中,`List` `Set` 都是集合框架中的重要接口,但它们有显著的区别: ### List的特点: - **允许重复元素**:列表可以包含相同的元素多次,并保持插入顺序。 - **索引访问**:由于列表是有序的,因此可以通过整数索引来获取特定位置的元素。 - **典型实现类**:ArrayList、LinkedList等。 例如,你可以通过下标来查找或修改某个具体的元素。 ```java List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("apple"); // 可以添加重复项 System.out.println(list.get(0)); // 输出 "apple" ``` --- ### Set的特点: - **不允许重复元素**:一旦尝试向集合中加入已存在的元素,则新元素不会被添加进去。 - **无固定排序规则**(某些实现除外):普通的 HashSet 并不保证迭代顺序;但是 LinkedHashSet 维护了插入顺序,而 TreeSet 则按照自然顺序或者自定义比较器进行排序。 - **典型实现类**:HashSet、LinkedHashSet、TreeSet 等。 如果试图将两个相等的对象放入 set 中,第二个会被忽略掉。 ```java Set<String> set = new HashSet<>(); set.add("apple"); set.add("banana"); set.add("apple"); // 第二个"apple"不会成功加入 for (String s : set) { System.out.println(s); } // 结果可能是 {"banana", "apple"} 或其他任意排列形式 ``` 综上所述,在选择使用哪种数据结构时需要考虑是否关心次序以及是否存在重复值的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值