Java学习笔记----集合类

1. 集合

定义:用来存放对象的容器,当然,也可以存储基本类型的数据。

除了集合,数组也可以存取对象,但用数据存取对象一个缺点就是,数组的长度是定长的,没有办法改变其长度,因此,就产生了集合,使得对象的增删查改变得容易起来。

2.集合的继承体系图

下图为常用到的集合继承图,由java.util包提供,collection是接口层次中的根接口,由于各类集合由不同存储对象的方式,所以collection的子类形成了不同的集合类。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.泛型

jdk1.5版本出现的新特性。用于解决安全问题,是一个安全机制。当使用引用类型不确定时,就可以使用泛型。

  • 将运行时期出现的ClassCastException转移到了编译时期,方便程序员解决问题。
  • 避免了强制转换的问题。(jdk1.5之前调用iterator时,获取集合中的对象需要强制转换。)

4.List集合

List集合中的对象有顺序,且允许集合中的元素重复。我的理解就是可变长度的数组。
由于和数组相似,在父类collection的方法基础上,还增加了对索引操作的方法。
(1)get(int index)
(2)set(int index, Object obj)

(1) List接口常用实现类
  1. ArrayList
    底层依赖数组的实现,可以快速的获取集合中的元素,缺点是插入删除不方便,需要挪动插入、删除位置后的所有元素。(其实在插入、删除的时候,虚拟机会创建新的数组,效率太低)。

  2. LinkedList
    底层依赖链表实现,查询集合中的元素不方便,但插入、删除方便。

建议:一般使用ArrayList,只有增删特别频繁时,才使用LinkedList。

5.Set集合

Set集合中的元素无序且不能重复。因此,在插入元素时,需要进行判断集合中是否有这个对象,没有才可以进行插入。

  1. HashSet
    底层依赖哈希算法,根据哈希算法指定对象的存储地址。如果这个地址没有存储对象,直接存入。如果存在对象的话,调用equals()判断两个对象是否相等。如果相等,就舍弃添加对象操作,如果不等,就直接添加在之前对象的后面(参考哈希表)。

在这里插入图片描述

如何确保存入元素的唯一性就是靠上述方法实现。
注意:删除、查找也依赖上面两个方法。

  1. TreeSet

底层依赖二叉树,但TreeSet会根据插入的元素进行排序。

(1)比较的第一种方式:插入的对象需要实现Comparable接口,重写conparaeTo()方法。这样插入的对象才具有可比性。否则,无法插入元素。。TreeSet集合中对象的唯一性有conpareTo()方法确定,返回值大于0时,与二叉树右子树进行比较。小于0时,与二叉树的左子树进行比较,直至没有可比的元素为止。当返回值为0时,说明插入的对象与集合中的对象相同,添加对象失败。
(2)比较的第二中方式:当插入的对象没有实现Comparable接口时,此时需要集合自身实现比较对象的功能。在构造方法中创建传入一个比较器。
在这里插入图片描述
如果两个比较都存在时,以比较器为准。

猜你喜欢

转载自blog.csdn.net/Time__Lc/article/details/88643347