Java集合

文章介绍了Java集合框架中的核心概念,包括集合、数组和两者之间的区别。集合用于存储对象,具有可变长度,而数组长度固定。讨论了常见的集合类,如ArrayList、HashSet、HashMap等,并提到了线程安全的Vector和Hashtable,以及高效的ConcurrentHashMap。此外,还阐述了遍历集合的不同方式和ArrayList的优缺点,以及List和Set的区别。
摘要由CSDN通过智能技术生成

集合特点:

        1.集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理
        2.和数组对比对象的大小不确定。因为集合是可变长度的。数组需要提前定义大小

集合和数组的区别:

        1.数组是固定长度的;集合可变长度的。
        2.数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
       3. 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

常用的集合类:

        Map接口和 Collection接口是所有集合框架的父接口:            
                1. Collection接口的子接口包括:Set 接口和 List 接口
                2. Map接口的实现类主要有:HashMap TreeMap Hashtable ConcurrentHashMap
                3. Set接口的实现类主要有:HashSet TreeSet LinkedHashSet
                4. List接口的实现类主要有:ArrayList LinkedList Stack 以及 Vector

   安全的集合类:

        Vector:就比 Arraylist 多了个 synchronized (线程安全),因为效率较低,现在已经不太建议使用。
        hashTable:就比 hashMap 多了个 synchronized ( 线程安全 ) ,不建议使用。
        ConcurrentHashMap:是 Java5 中支持高并发、高吞吐量的线程安全 HashMap 实现。它由
        Segment数组结构和 HashEntry 数组结构组成。 Segment 数组在 ConcurrentHashMap 里扮演锁的 角色,HashEntry 则用于存储键 - 值对数据。一个 ConcurrentHashMap 里包含一个 Segment 数组, Segment的结构和 HashMap 类似,是一种数组和链表结构;一个 Segment 里包含一个 HashEntry 数组,每个HashEntry 是一个链表结构的元素;每个 Segment 守护着一个 HashEntry 数组里的元 素,当对HashEntry 数组的数据进行修改时,必须首先获得它对应的 Segment 锁。(推荐使用)

确保集合不被修改

        可以使用 Collections. unmodififiableCollection(Collection c) 方法来创建一个只读集合,这样改变 集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常
        List<String> list = new ArrayList<>();
        list. add("x");
        Collection<String> clist = Collections. unmodifiableCollection(list);
        clist. add("y"); // 运行时此行报错
        System. out. println(list. size());

Java遍历

        遍历方式有以下几种:
1. for 循环遍历,基于计数器。在集合外部维护一个计数器,然后依次读取每一个位置的元素,
当读取到最后一个元素后停止。
2. 迭代器遍历, Iterator Iterator 是面向对象的一个设计模式,目的是屏蔽不同数据集合的特
点,统一遍历集合的接口。 Java Collections 中支持了 Iterator 模式。
3. foreach 循环遍历。 foreach 内部也是采用了 Iterator 的方式实现,使用时不需要显式声明
Iterator 或计数器。优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能在遍历过
程中操作数据集合,例如删除、替换。
ArrayList 的优缺点
        优点:
       1.ArrayList 底层以数组实现,是一种随机访问模式。 ArrayList 实现了 RandomAccess 接口,
因此查找的时候非常快。
        2.ArrayList 在顺序添加一个元素的时候非常方便。
        缺点:
        1.删除元素的时候,需要做一次元素复制操作。如果要复制的元素很多,那么就会比较耗费性
能。
        2.插入元素的时候,也需要做一次元素复制操作,缺点同上
适用场景:ArrayList 比较适合顺序添加、随机访问的场景
多线程场景下适用ArrayList:
        List<String> synchronizedList = Collections.synchronizedList(list);
        synchronizedList.add("aaa");
        synchronizedList.add("bbb");
        for (int i = 0; i < synchronizedList.size(); i++) {
                System.out.println(synchronizedList.get(i));
        }
List Set 的区别
        1.List , Set 都是继承自 Collection 接口
        2.List 特点:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多 个null 元素,元素都有索引。常用的实现类有 ArrayList LinkedList Vector
        3.Set 特点:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一 个null 元素,必须保证元素唯一性。 Set 接口常用实现类是 HashSet LinkedHashSet 以及
TreeSet
        4.另外 List 支持 for 循环,也就是通过下标来遍历,也可以用迭代器,但是 set 只能用迭代,因为他无序,无法用下标来取得想要的值。
       1. Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
       2. List:和数组类似, List 可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值