集合(自用)

集合

JCF(Java Collections Framework)就是集合框架的简写。集合其实也是一种容器(用来存储数据的)。也可以说集合是一种对象。
Collection接口,属于java集合框架体系中的顶层集合对象。在它的子接口中List接口和Set接口最为常用。
集合遍历有专属的迭代器,在java,已经提供了一个集合对象专用的遍历方式:Iterator(迭代器对象)

小细节:
1、集合对象中不能存储基本类型数据。而从JDK1.5开始,可以在书写代码时,书写基本类型数据存储到集合中(JVM做了自动装箱操作)
2、 在使用集合对象的add()方法时,向集合中存储的元素都会转为Object类型后,再存储(向上转型)
3、 在遍历集合时,从集合中获取的每一个元素也都是Object类型,如果想要使用特有成员需要向下转型(注意:使用instanceof避免向下转型时遇到ClassCastException异常)

与另一个容器数组的区别:
1、 集合的大小是可以改变的,会随集合元素的添加自动扩展。
2、数据中只能存放对象的引用,而数组可以有基本数据类型,也可以有引用数据类型的数组。
3、集合中的算法更加丰富,使用集合操作数据会比数组简捷。
4、集合对象中存储的元素只能是对象(引用类型)。集合存储的引用类型实际存储的是地址

List集合

List集合特点:
1、 List集合中的元素在存储和获取上是有序的(有序不是意味着排序,而存取元素和书写代码顺序一致)
2、 具有角标,可以通过角标精确访问集合中的每一个元素。
3、 List集合中允许存储重复的元素
4、 List集合中允许存储null元素(null元素可以有多个)

在使用集合Iterator或者ListIterator迭代器时,不可以进行添加或者删除操作。只有使用for循环时才能进行添加和删除操作。因为在使用迭代器时,已经获取了集合的长度,如果我们再添加元素时,集合变长,而获取的长度没变,集合长度变化了就会抛出ConcurrentModificationException(方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。)。

ArrayList集合
ArrayList在初始化时,会自动生成一个长度为十的数组,每当集合容量不足以储存元素时,就会创建一个新的容量:新容量=(旧容量*3)\2+1

ArrayList集合的特点:
1、继承了List集合的优点。
2、底层使用可变数组结构。
3、ArrayList集合对象在遍历查找元素的效率上比较高,中间增删元素的效率比较低。
4、线程不安全。
由于ArrayList集合底层使用的是可变数组,所以ArrayList中特有方法都是围绕角标设计。(集合中的方法和List集合相同)

Vector集合
一个可增长的对象数组,底层也用数组实现,性能和ArrayList类似,由于它在方法上使用了synchronized关键字,对方法进行了同步,所以与ArrayList相比,它是线程安全。但是付出的代价就是效率变低。
linkedList集合
采用不连续空间实现,使用的是双向链表。集合中的元素除了存储数据以外,还需要存储上一个元素和下一个元素的地址。随机访问效率低,但是顺序访问效率高,但是插入删除元素快。

Set集合

存取元素不保证有序、不允许存储重复元素、没有角标,只能通过迭代器对象(Iterator)遍历集合。

HashSet集合
在底层直接调用hashmap中的方法,在添加元素时,用添加的元素做键,自行创建一个静态的objcet常量做值,在map集合中键是不会重复的,所以,set集合不能存放重复元素。
底层使用哈希表结构,而哈希表其实在底层还是使用数组来存储数据,所有存储不重复元素和查询元素的效率上比较高。它需要依赖对象自身的hashCode和equals方法保证集合中的元素唯一性,需要我们重写对象的hashCode和equals方法。

TreeSet集合
1、 底层使用二叉树结构(红黑树)
2、 会对存储的元素进行排序。
排序方式有两种:1、自然排序; 2、比较器排序(Comparat)

使用TreeSet存放对象时,对象需要实现Comparable接口或者创建集合是传入一个比较器Comparator对象,二叉树也就是当前元素与前一个元素做比较,如果大于则朝着二叉树的右边储存或者继续与右边的元素进行比较,如果小于则朝二叉树的左边储存或者继续与左边的元素进行比较。

Map集合

一个元素由两个对象组成,键对象和值对象。其中键对象唯一不可重复,且一个键对象最多映射一个值对象。
常用集合:HashMap(哈希表作用在HashMap集合的key上),TreeMap(比较器作用在key上)

HashMap底层使用哈希表(数组+链表+二叉树)对数据进行存储。

使用TreeMap存放对象时,键对象需要实现Comparable接口或者创建集合是传入一个比较器Comparator对象。

ConcurrentHashMap结合了HashMap和HashTable的特点,既线程安全,访问速度也快,它加的锁,是局部锁,而不是在方法上加锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值