Java回炉之集合框架

Java回炉之集合框架

Collection

  1. 添加

    • boolean add(Object obj):添加一个元素
    • boolean addAll(Collection coll):添加一组元素
  2. 删除

    • boolean remove(object obj):删除一个元素
    • boolean removeAll(Collection coll):删除一组元素
    • void clear():删除所有元素
  3. 判断

    • boolean contains(object obj):是否包含一个元素
    • boolean containsAll(Colllection coll):是否包含所有元素
    • boolean isEmpty():判断集合中是否为空
  4. 获取

    • int size():获取元素个数
    • Iterator iterator():获取迭代器(用于遍历)
  5. 其他

    • boolean retainAll(Collection coll):调用者对参数做交集,返回调用者是否发生改变。
    • Object[] toArray():将集合转成数组

Iterator

该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。所以该迭代器对象是在容器中进行内部实现的。对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
- 用于遍历Collection
- hasNext:后面是否还有元素
- next:指向并返回下一个元素

List

  • 特点:存取有序,可重
  • 特性
    add(int,Object):在指定位置添加元素
    add(int,Collection):在制定位置添加一组元素
    get(int):获取指定位置的元素
    remove(int):删除指定位置的元素,并返回
    set(int,Object):修改指定位置的元素,返回修改前的元素
    subList(int,int):返回指定范围的子集
  • 遍历:及支持Collection的Iterator遍历,也支持用for+size+get遍历
  • ListIterator:Iterator的子类
    使用list.listIterator()返回一个ListIterator对象
    hasPrevious():前面是否还有元素
    previous():指向并返回上一个元素
    在使用该类对象遍历List过程中,如需修改list需使用该类的方法。
    add(Object):在当前位置后添加一个元素

List的三个实现类

ArrayList

  • 底层数据结构是数组,查询快,增删慢
  • 线程不安全,效率高
    1. contains()方法的实现为遍历并判断equals()
    2. 在使用Iterator遍历过程中修改list,list会被修改,但下一次调用Iterator的next会报错。
    3. foreach原理也是Iterator,因此在foreach中修改list也会初上上述情况
    4. 数组转集合:List<String> list = ArrayList.asList("t","e","s","t");注意转换后的list长度不可变!即允许修改但不许增删。

Vector

  • 底层数据结构是数组,查询快,增删慢
  • 线程安全,效率低
    1. addElement(Object):被add()取代
    2. elementAt(int):被get()取代
    3. elements():被iterator()取代
    4. Enumeration:被Iterator取代

LinkedList

  • 底层数据结构是链表,查询慢,增删快
  • 线程不安全,效率高
    1. addFirst(Object):在开头添加(列表为空抛异常)
    2. offerFirst(Object):在开头添加(列表为空返回null)
    3. addLast(Object):在结尾添加(列表为空抛异常)
    4. offerLast(Object):在结尾添加(列表为空返回null)
    5. getFirst():获取开头元素(列表为空抛异常)
    6. peekFirst():获取开头元素(列表为空返回null)
    7. getLast():获取结尾元素(列表为空抛异常)
    8. peekLast():获取结尾元素(列表为空返回null)
    9. removeFirst():获取并删除开头元素(列表为空抛异常)
    10. poolFirst():获取并删除开头元素(列表为空返回null)
    11. removeLast():获取并删除结尾元素(列表为空抛异常)
    12. poolLast():获取并删除结尾元素(列表为空返回null)

Set

  • 存取无序,不包含重复元素
  • 支持foreach 不支持for

HashSet

底层数据结构是哈希表
- add步骤(HashMap的put()方法)
主要通过hashCode()和equals()方法来判断是否重复
自定义类可通过IDE快捷键生成hashCode()和equals()方法

LinkedHashSet

底层数据结构是哈希表和链表
- 保证存取有序和唯一性

TreeSet

按照某种规则进行排序(自然排序或比较器Comparator排序)
- add步骤(TreeMap的put()方法)
- 存放自定义类,该类必须(实现Comparable接口 或 在TreeSet构造方法中传入Comparator对象)

如何选择使用?

  • 可重复:需要线程安全:Vector
  • 可重复:不需要线程安全:查询多:ArrayList(最常用List,最常用Collection
  • 可重复:不需要线程安全:增删多:LinkedList
  • 不重复:不排序:HashSet(最常用Set
  • 不重复:要排序:TreeSet
  • 最常用:ArrayList

Map

Map顶层接口,与Colletion无关
1. 特性
- 存储键值对,键不可重复且只能映射到一个值。
- Map的数据结构针对键
- 键存取无序
1. 功能
- 添加
put(K key,V value);添加一个键值对(若key已存在则更新value并返回旧value;否则添加键值对并返回null)
- 删除
clear();清除所有键值对
remove(K);根据key删除元素,并返回value
- 判断
containsKey(Object);Key中是否包含元素
containsValue(Object);Value中是否包含元素
isEmpty();是否为空
- 获取
Set

HashMap

主要通过hashCode()和equals()方法来判断key是否重复
- 线程不安全,效率高
- 允许null键,null值

LinkedHashMap

底层实现为哈希表和链表,保证key唯一且存取有序

TreeMap

底层实现为红黑树,保证key唯一且可排序

Hashtable

注意talbet小写
- 线程安全,效率低
- 不允许null键,null

Collections

针对集合进行操作的工具类,public方法均为static
常用方法:
- sort()排序。支持自然排序比较器排序
- binarySearch()二分查找
- max()最大值
- reverse()反转
- shuffle()随机置换(扑克洗牌)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值