Java基础学习(二) -- 集合

一、集合框架

1、集合框架图

2、集合与数组的区别

  1. 长度:数组固定不变,集合可变;
  2. 内容:数组可以是基本类型,也可以是引用类型。集合只能是引用类型;
  3. 元素:数组只能存储同一种类型。集合可以存储不同类型;

3、常用集合分类

Collection: 接口的接口,对象的集合(单列集合)
    |---List接口:元素按进入先后有序保存,可重复;
            |---LinkedList接口实现类,链表、插入删除,没有同步,线程不安全;
            |---ArrayList接口实现类,数组、随机访问,没有同步,线程不安全;
            |---Vector接口实现类,数组,同步,线程安全;
                      |---Stack是Vector类的实现类;
    |---Set接口:只接收一次数据,不能重复,并做内部排序;
            |---HashSet使用hash表存储元素
                      |---LinkedHashSet链表维护元素的插入顺序
            |---TreeSet底层实现为二叉树,元素排好序

Map: 接口,键值对的集合(双列集合)
    |---Hashtable接口实现类,同步,线程安全;
    |---HashMap接口实现类,没有同步,线程不安全;
            |---LinkedHashMap双向链表和哈希表实现
            |---WeakHashMap 缓存cache存取,有自清理机制
    |---TreeMap红黑书对所有的key进行排序
    |---IdentifyHashMap key值内容可重复(对象地址是不同的),却别与HashMap的key相同内容会替换

4、Collection集合常用方法

1、boolean add():在集合末尾添加元素;
2、boolean remove(Object o):若本类集合中有值与o的值相等的元素,则删除该元素,并返回true;
3、void clear():清除本类中所有元素,调用完该方法后本类集合将为空;
4、boolean contains(Object o):判断集合中是否包含某元素;
5、boolean isEmpty(): 判断集合是否为空;
6、int size(): 返回集合中元素个数;
7、boolean addAll(Collection c): 将一个类集c中的所有元素添加到另一个类集中;
8、Object[] toArray(): 返回一个包含了本类集中所有元素的数组,数组类型为Object[];
9、Iterator iterator(): 迭代器,集合的专用遍历方式;

二、List  VS  Set集合

1、List与Set区别

  1. 有序性:List按插入顺序排序;Set存取顺序不一致;
  2. 唯一性:List可以重复;Set元素唯一;
  3. 获取元素:List可以通过索引直接操作元素;Set不能根据索引获取元素;

2、List详解

  1. ArrayList  底层数据结构为数组,查询快、增删慢、线程不安全、效率高、可以存储重复元素;
  2. LinkedLIst  底层数据结构为链表,查询慢、增删快、线程不安全、效率高、可以存储重复元素;
  3. Vector  底层数据结构为数组,查询快、增删慢、线程安全、效率低,可以存储重复元素;

3、Set详解

  1. HashSet  底层数据结构为哈希表,元素无序且唯一,线程不安全、效率高、可以存储null元素;
  2. LinkedHashSet 底层数据结构为链表和哈希表共同实现,链表保证元素顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全、效率高;
  3. TreeSet 底层数据结构采用二叉树实现,元素唯一且已经排好序;唯一性也需要重写hashCode和equals方法,二叉树结构保证了元素的有序性;

     注:Set具有和Collection完全一样的接口,实际Set就是Collection,只是行为不同。

4、总结

  1. List特点:元素存在放入顺序,可重复; Set特点:元素无放入顺序,不可重复,元素会覆盖。(注:元素虽无放入顺序,但元素在Set中的位置由该元素的HashCode决定,其位置是固定的,加入Set的Object必须定义equals方法;另外list支持for循环,即通过下标来遍历,也可以用迭代器,而Set只能用迭代,因为Set无序,无法用下标来取值)
  2. List:和数组类似,可以动态增长,查找元素效率高,插入删除元素效率低,因会引起其他元素位置改变;Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起其他元素位置改变。
  3. ArrayList和LinkedList的区别和使用场景
ArrayList
优点:ArrayList实现基于动态数组的数据结构,因地址连续,一旦数据存储好了,查询操作效率会比较高;
缺点:因为地址连续,ArrayList要移动数据,所以插入和删除操作效率比较低;

LinkedList
优点:linkedlist基于链表的数据结构,地址是任意的,所以开辟内存空间时不需要连续的地址,对于新增add和删除remove,LinkedList比较有优势。LinkedList适用于头部操作或插入到指定位置的场景;
缺点:因为LinkedList要移动指针,所以查询操作性能会较低;

应用场景
当需要对数据进行遍历访问情况下选用ArrayList;
当需要对数据进行多次增加或删除时选用LinkedList;

     4、List与Set适用场景图
     

三、Map

        Map没有继承Collection接口,Map中和集合是成对存在,每一个元素有键与值两部分构成,通过键找到对应的值,需要注意的是Map中的集合的键不能重复,但值可以重复,每一个键只能对应一个值。

1、常用方法

1、void clear()
2、boolean containsKey()
3、boolean containsValue()
4、Set entrySet() 返回Map中所包含的键值对所构成的Set集合,每个集合元素都是Map.entry对象
5、Object get()
6、boolean isEmpty()
7、Set keySet()  返回该Map中所有key所组成的set集合
8、Object put() 添加键值对
9、void putAll() 
10、Object remove()
11、int size()
12、Collection values() 返回该Map里所有value组成的Collection
13、内部类Entry
    ① getKey()
    ② getValue()
    ③ setValue()

 

weixin151云匹面粉直供微信小程序+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值