数组和集合

数组的特点
  • 数组中保存的元素都是有序的,可以通过下标快速访问
  • 数组中保存的数据都是同一种类型
  • 数组的长度在定义后,无法改变
  • 数组无法获取其中保存的元素实际数量
集合的特点
  • 能保存一组数据,可以有序可以无序
  • 集合的容量可变
  • 集合中可以保存不同类型的数据
  • 可以获取集合中保存的元素实际数量

集合的根接口为Collection接口和Map接口

 Collection接口

该接口有两个核心子接口: List Set
这两个接口都可以保存一组元素, List 接口 保存元素时,是 有序可重复 的; Set 接口 保存元素时,是 无序 不重复 的。

 List接口

有序集合,元素可以重复,允许保存null,可以通过索引获取对应位置上的元素。

 ArrayList实现类(适合查询修改)

  • 采用数组实现的集合
  • 可以通过索引访问元素,可以改变集合大小。如果要在其中插入或删除元素时,会影响后续元素
  • 该集合中保存的都是引用类型,即便保存了数组123,也保存的是Integer类型的123,而不是int型的123
  • 该集合查询效率高,中途增加和删除元素效率低

LinkedList实现类(适合增加删除)

  • 采用双向链表实现的集合
  • 集合中保存的每个元素也称为节点,除首尾节点外,其余节点都保存了自己的信息外,还保存了其前一个和后一个节点的地址
  • 如果在双向链表的数据结构中插入和删除操作节点时,不会影响其他节点的位置。如添加时新节点时,只需要重写定义新节点的前后节点位置即可
  • 如果要查询某个节点时,需要从头结点或尾结点开始一步步得到目标节点的位置
  • 双向链表在中间插入和删除的效率高,随机读取的效率低

Set接口(无序不重复)

无序集合,元素不可以重复,允许保存 null ,没有索引。
Set 接口中没有自己定义的方法,都是继承于 Collection 接口中的方法
HashSet 实现类
  • 采用哈希表实现
  • 元素不能重复,无序保存,允许保存一个null
  • 本质是一个HashMap对象
  • 使用HashSet集合时,通常要重写实体类中的equalshashcode方法

TreeSet实现类(二叉树)

  • 特殊的Set实现类,数据可以有序保存,可以重复,不能添加null
  • 采用红黑树(自平衡二叉树)实现的集合
  • 只能添加同一种类型的对象且该类实现了Comparable接口
  • compareTo()方法的返回值决定了能否添加新元素和新元素的位置
  • 添加的元素可以自动排序

Map接口

Map 称为映射,数据以 键值对 的形式保存。保存的是键与值的对应关系。
键称为 Key ,值称为 Value ,键不能重复,键允许出现一个 null 作为键,值无限制。
键和值都是引用类型。
集合和数组之间的转换
  • 集合转换为数组:使用Collection接口中的toArray()方法
Object[] obj = 集合对象.toArray();
List<Integer> list = new ArrayList();
list.add(123);
list.add(63);
list.add(3);
Integer[] nums =(Integer[]) list.toArray();
  • 数组转换为集合
//一个数组对象
int[] nums ={11,2,66,3,6,21};
//定义集合对象
List list = new ArrayList();
//遍历数组的同时添加到集合中
for(int i:nums){
list.add(i);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值