集合两大类之Collection集合

集合是用来存储引用类型数据的容器
集合分为两大类:
Collection集合: 单个存储
Map集合: 是按<键,值>对的形式存储. <员工姓名,工资>

  • Collection集合
    java.util包中Collection集合结构
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • List集合
    List接口继承了Collection, Collection有的操作List都能继承
    List为每个元素指定了一个索引值,主要增加了针对索引值的操作:
    add( index, o)
    remove( index )
    get( index )
    sort(Comparator)

ArrayList与Vector

  • ArrayList与Vector
    1. 底层数据结构都是数组, Vector是线程安全的, ArrayList不是线程安全的
    1. 默认初始化容量: 10
    1. ArrayList扩容: 1.5倍 , Vector扩容: 2 倍

LinkedList
在这里插入图片描述LinkedList底层是双向链表, 主要增加了针对第一个元素/最后一个元素的操作
addFirst(o) addLast(o)
removeFirst() removeLast()
getFirst() getLast()
push(o) pop()
offer(o) poll()

4.5 Set集合
特点:
无序, 不可重复

4.6 HashSet

    1. HashSet底层是HashMap
    1. 向HashSet中添加元素,实际上就是把该元素作为键添加到底层的HashMap中
    1. HashSet就是Hashmap键的集合

4.7 TreeSet

  • 1 . TreeSet实现了SortedSet接口,可以对集合中的元素自然排序, 要求集合中元素必须是可比较的
  •  	1)在创建TreeSet集合时,可以在构造方法中指定Comparator比较器
    
  •  	2)如果没有指定Comparator比较器,要求元素的类实现Comparable接口
    
    1. TreeSet底层是TreeMap
    1. 向TreeSet添加元素时, 就是把该元素作为键添加到了底层的TreeMap中
  • 4 .TreeSet就是TreeMap键的集合

4.8 Collection小结
Collection集合特点: 单个数据存储
Collection是一个接口, 定义了一组操作集合的规范, 所有的实现类都需要重写Collection接口的方法 . 常用的方法:
add( o ) , remove( o ) , contains( o) , size() ,
iterator()返回迭代器, hasNext() , next() , remove()
---- List集合
有序, 存储顺序就是添加顺序
可重复, 可以存储重复的数据
为每个元素指定了索引值, 增加了针对索引值的操作
add( index, o ) remove( Index ) get(index) sort( Comparator )
-------- ArrayList
底层是数组, 访问快, 添加删除慢
初始化容量: 10
扩容: 1.5倍
--------Vector
底层也是数组, 与Arraylist相比,它是线程安全的, ArrayList不是线程安全的
初始化容量: 10
扩容: 2倍
--------LinkedList
底层是双向链表, 添加删除快, 访问慢
增加了针对第一个元素/最后一个元素的操作
addFirst()/addLast() removeFirst()/removeLast() getFirst()/getLast(0
push(o) / pop() 模拟栈 offer(o) /poll() 模拟队列
-----------应用场景--------------------------------------------------------------------------------------------
如果存储重复的数据选择List集合
如果以查询访问为主选择ArrayList
如果频繁添加删除选择LinkedList
如果是多线程环境选择java.util.concurrent. CopyOnWriterArrayList
注意**********************************************************
如果List集合存储自定义类型, contains(o)/remove(o)等方法需要调用对象的equals()方法, 应该在自定义类中重写equals()/hashCode()方法

---- Set
无序, 存储顺序可能与添加顺序不一样
不可重复, 在Set集合中不能存储重复的数据
--------HashSet
底层是 HashMap
向HashSet添加元素就是把该元素作为键添加到了底层的HashMap中
HashSet就是HashMap键的集合
--------TreeSet
TreeSet实现了SortedSet接口, 可以对集合中的元素自然排序, 要求元素必须是可比较的, 要么在构造方法中指定Comparator比较器, 如果没有指定comparator比较器的情况下,元素的类需要实现Comparable接口
TreeSet是先选择Comparator, 没有Comparator的情况下再选择Comparable
对于开发人员来说,一般情况下通过Comparable接口定义一个默认的比较规则,在Comparator中可以定义很多不同的比较规则
TreeSet底层是TreeMap
向TreeSet添加元素就是把该元素作为键添加到了底层的TreeMap中
TreeSet就是TreeMap键的集合
----------应用场景----------------------------------------------------------------------------------------------------
存储不重复的数据选择Set集合
如果不需要排序选择HashSet
如果需要排序就选择TreeSet
如果在多线程环境中, 不排序选择java.util.concurrent.CopyOnWriteArraySet, 如果需要排序选择ConcurrentSkipListSet
注意********************************************************
选择HashSet集合, 需要重写equals()/hashCode()方法
选择TreeSet集合需要指定比较规则

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值