常用集合类解析

集合是指一个对象容纳了多个对象,这个集合对象主要用来管理维护一系列相似的对象。数组就是一种对象。

数组可以存放基本数据类型,须指定数据类型同种类型存放,集合只能存放对象,不需要指定数据类型OBJECT,数组是确定长度的,集合不定长的

数组通过下标访问,效率高

集合框架接口的分类:(分collection接口 和 map接口)

collection接口一些常见子接口List,Set,SortedSet

List接口按照元素一定的相关顺序来组织有序的,存放位置与放入的顺序有关),List接口中数据可重复。 

Set接口是数学中集合的概念:其元素无序,且不可重复。(无序的,存放位置与放入的顺序有关

SortedSet会按照数字将元素排列,为“可排序集合”。

List接口:常用的两个实现类:ArrayList和LinkedList

1.ArrayList和数组非常类似,其底层也用数组组织数据,ArrayList是动态可变数组。

底层:指存储格式。说明ArrayList对象都是存在于数组中。数组可以通过方法类arrays转换list。

注:数组和集合都是从下标0开始。 

size方法用于得到实际的对象数量,本身未提供数组容量capacity方法,可以通过反射得到这个属性

((Object)list).getClass().getDeclaredField("elementData");得到封装的字段elementData  为数组

f.get(list).length;得到一个ArrayList的实际容量。

ArrayList线程不安全的,效率高,默认初始10个大小,每次扩容是原容量的一半,JDK1.7的源码采用移位算法实现扩容效率高。对应的为Vector线程同步,默认初始10个大小,每次扩容是原容量的两倍。

ArrayList底层是object数组,所以ArrayList具有数组的查询速度快(数组下标查询)的优点以及增删速度慢(数组下标在后边的都有变动)的缺点。

2.而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。所以LinkedList具有查询效率低但增删效率高的特点。

特有方法:add、remove first、last 方法操作第一个,最后一个元素。


set接口常用实现类hashset与treeset   没有重复元素

hashset通过哈希表存放对象,与放入顺序无关,主要方法hashcode与equales方法,两个都相同说明重复元素,不存储。

treeset,二叉树结构存储元素,使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator比较器对象进行排序,具体取决于使用的构造方法。


map接口存放的为键值对,键是唯一的,值可以通过对应键得到。将键映射到值的对象。

HashTable: 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类 是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。

HashMap: 实现一个映象,允许null,而且允许键是空(键必须是唯一的,当然只能有一个)。线程不安全的。

TreeMap: 实现这样一个映象,对象是按键升序排列的。

collections工具类提供了操作集合的一些静态方法。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值