JCF:Java集合框架

JCF主要数据结构实现类

列表 List,ArrayList,LinkedList

  • 有序的Collection
  • 允许重复元素

List的主要实现

  • ArrayList 非同步的
  • LinkedList 非同步的
  • Vector 同步
ArrayList
  • 以数组实现的列表,不支持同步 List list = Collections.synchronizedList(new ArrayList())
  • 利用索引位置可以快速定位访问
  • 不适合指定位置的插入、删除操作
  • 适合变动不大,主要用于查询的数据
  • 和Java数组相比,其容量是可以动态调整的
  • ArrayList在元素填满容器时会自动扩充容器大小的50%
LinkdeList
  • 以双向链表实现的列表,不支持同步 List list = Collections.synchronizedList(new LinkedList())
  • 可被当作堆栈、队列和双端队列进行操作
  • 顺序访问高效,随机访问较差,中间插入和删除高效
  • 适用经常变化的数据
Vector
  • 和ArrayList类似,可变数组实现的列表
  • Vector同步,适合在多线程下使用
  • 原先不属于JCF框架,属于Java最早的数据结构,性能较差
  • 从JDK1.2开始,Vector被重写,并纳入到JCF
  • 官方文档建议在非同步情况下,优先适应ArrayList
总结
  • 同步采用Vector
  • 非同步情况下,根据数据操作特点选取ArrayList/LinkedList

集合 Set,HashSet,TreeSet,LinkedHashSet

Set
确定性:对任意对象都能判定其是否属于某一个集合
互异性:集合内每个元素都是无差异的,注意是内容差异
无序性:集合内的顺序无关

HashSet 基于散列函数的集合,无序,不支持同步
TreeSet 基于树结构的集合,可排序,不支持同步
LinkedHashSet 基于散列函数和双向链表的集合,可排序,不支持同步

HashSet

  • 基于HashMap实现的,可以容纳null元素
  • 不支持同步Set s = Collections.synchronizedSet(new HashSet());

LinkedHashSet

  • 继承HashSet,也是基于HashMap实现的,可以容纳null元素
  • 不支持同步Set s = Collections.synchronizedSet(new HashSet())
  • 通过一个双向链表维护插入顺序

TreeSet

  • 基于TreeMap实现的,不可以容纳null元素,
  • 不支持同步SortedSet s = Collections.synchronizedSortedSet(new TreeSet())
  • 根据compareTo方法或指定Comparator排序

HashSet和LinkedHashSet判定元素重复的原则

  • 判定两个元素的hashCode是否相同,若不同,返回false
  • 若两者hashCode相同,判定equals方法,若不同,返回false,否则返回true。

TreeSet判定元素重复的原则

  • 需要元素继承自Comparable接口
  • 比较两个元素的compareTo方法

映射 Map,HashMap,TreeMap,LinkedHashMap

Map

  • 数学定义:两个集合之间的元素对应关系
  • 一个输入对应一个输出
    HashTable 同步,慢,数据量小
    HashMap 不支持同步,快,数据量大
    Properties 同步,文件形式,数据量小

Hashtable

  • K-V对,K和V都不允许为null
  • 同步,多线程安全
  • 无序的
  • 适合小数据量

HashMap

  • K-V对,K和V都允许为null
  • 不同步,多线程不安全Map m = Collections.synchronizedMap(new HashMap())
  • 无序

LinkedHashMap

  • 基于双向链表的维持插入顺序的HashMap

TreeMap

  • 基于红黑树的Map,可以根据key的自然排序或者compareTo方法进行排序输出

Properties

  • 继承于Hashtable
  • 可以将K-V对保存在文件中
  • 适用于数据量少的配置文件
  • 从文件加载的load方法,写入到文件中的store方法
  • 获取属性getProperity,设置属性setProperity

总结

  • HashMap是最常用的映射结构
  • 如需要排序,考虑LinkedHashMap和TreeMap
  • 如需要将K-V存储为文件,可采用Properities类

JCF主要算法类

  • Arrays
  • Collections

Arrays 处理对象是数组

  • 排序:对数组排序,sort/parallelSort
  • 查找:从数组中查找一个元素,binarySearch
  • 批量拷贝:从源数组批量复制元素到目标数组,copyOf。
  • 批量赋值:对数组进行批量复制,fill
  • 等价性比较:判断两个数组内容内容是否相同,equals

Collections:处理对象是Collection及其子类

  • 排序:对List进行排序,sort
  • 搜索:从List中搜索元素,binarySearch
  • 批量赋值:对List批量赋值,fill。
  • 最大、最小:查找集合中最大/小值,max,min
  • 反序:将List反序排列,reverse。

对象比较

  • 对象实现Comparable接口(需要修改对象类)
    • compareTo方法
      • 大于 返回1 等于返回0 小于返回-1
    • Arrays和Collections在进行对象sort时,自动调用该方法
  • 新建Comparator(适用于对象类不可更改的情况)
    • compare方法
      • 大于返回1,等于返回0,小于返回-1
    • Comparator比较器将作为参数提交给工具类的sort方法

总结

  • Arrays和Collections功能强大,不需要重复造轮子
  • 对象比较方法Comparable/Comparator
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张知文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值