JavaSE学习日记之集合

一、集合与数组的区别

数组:可存储基本类型与引用类型,存储的数据类型相同,长度固定

集合: 只能存储引用类型,存储类型不相同,且存储长度不固定。对于基本类型会转化为包装类的引用类型,进行存储。

二、集合中的接口

a、Collection接口

Collection根接口包含:List和Set两个子接口。(其子孙存储单个对象)

其中List子接口的实现类有:ArrayList,LinkedList,Vector

Set子接口的实现类有:HashSet,TreeSet

1、List接口

List只是一个接口,其使用方式是使用多态调用实现类。

List的存储特点:数据可重复,有数组下标,有序

实现类ArrayList VS 实现类LinkedList

1、增加数据

假如在队尾添加元素,ArrayList的效率会略高于Linkedlist,因为ArrayList队尾增加元素,是已经开辟好空间了的,只需要数组下标加一并赋值就行,但是LinkedList需要新开辟一块空间,在进行链接新结点,开辟空间是浪费时间的,所以ArrayList的效率会更高。

假如在指定位置增加元素,LinkedList的效率会远高于ArrayList,因为ArrayList在指定位置增加元素的方式是:从队尾开始,每个元素向后赋值,这样就会多出一个位置存储新的元素,时间复杂度为o(n)。LinkedList则是先开辟一个空间存储新结点,然后把目标位置的前驱后继结点链接到新结点,这样的时间复杂度为o(1)。

2、删除数据

删除数据和增加数据是一样的

3、查询数据

对于查询数据ArrayList的效率会高很多,因为数组是一块连续的存储空间,而LinkedList的存储空间不是连续的,每次还得查找地址,然后再对比。

4、修改数据

修改数据的本质就是查询数据和更改对应数据。因为是更改数据,所以ArrayList不必移动其他数据的位置,直接在原数据上进行修改,这样LinkedList的优势就不能体现。然后ArrayList的查询数据效率是远远大于LinkedList的,所以修改数据ArrayList快很多

总结:我们对于ArrayList的使用是更多的,因为遍历更常用。

2、Set接口

set接口的特点:无下标、无序、唯一

set的实现类:HashSet和TreeSet

HashSet的特点:元素唯一,无下标、无序。

存储原理:hash算法--每个对象都有特定的hash值,在hash表中有个位置,判断该位置是否有元素,没有的话直接存储,有的话和链表中的元素一一比较,确定唯一性。

HashSet存储自定义对象,在内部调用了hashcode和equals方法。要重写这两个方法,才能比较属性值。

TreeSet的特点:元素唯一,可排序,无下标

存储原理:二叉树存储

因为TreeSet是可排序的,所以就要进行数值之间的比较。

验证---自然排序法:

自定义类要进行数据的比较就要去实现Comparable接口,这样就能重写里面的compareTo()方法。在该方法中传入比较对象,字符串的比较用compareTo返回,整型的比较用(this.属性 - 传入对象.属性)返回。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值