Java集合

shuyepl 2023-03-21 19:14:53
Categories: Tags:

集合

跟数组一样,用来装一大堆东西的,相对于数组的话,集合有它的优点:

集合的继承框架图

Collection
├── List
│   ├── ArrayList
│   ├── Vector
│   └── LinkedList
├── Queue
│   ├── PriorityQueue
│   ├── ArrayQueue
│   ├── PriorityBlockingQueue
│   └── LinkedBlockingQueue
├── Set
│   ├── HashSet
│   ├── LinkedHashSet
│   └── TreeSet
├── Deque
│   ├── ArrayDeque
│   └── LinkedList
└── Map
    ├── HashMap
    ├── HashTable
    ├── LinkedHashMap
    └── TreeMap

集合分为两部分,一部分是Collection,一部分是Map(没有标明接口的都是实现类)

集合特点

List:有序可重复

Set:无序不可重复

Map:无序,键值对存储,键不可重复,值可重复

集合方法

看API文档不比看文章里面记录的寥寥几个方法香?

Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)

迭代器

总结

迭代器就是指Iterator对象,Collection接口的实现类都可以调用iterator方法获取一个迭代器对象,用来进行遍历操作,在操作迭代器对象的时候记得一点,如果在遍历的过程中调用了非迭代器的方法对集合进行了增删改操作记得重新更新迭代器对象,不然会报错 ConcurrentModificationException,要想在不报错的情况下进行删除操作的话可以使用迭代器对象的相关方法。

对于List接口来说,它还有一个listIterator方法,这个方法返回一个ListIterator接口可以接收的对象,而ListIterator接口继承自Iterator接口,除了Iterator接口本身提供的方法外,ListIterator还扩展了很多自身的方法,可以对集合(这里讲的是List接口下的集合)进行更加灵活的操作,详细看API文档

Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)

对于迭代器的一点想法

这个部分有点小啰嗦的

迭代器就是一个“指针”,这个指针在刚开始创建好迭代器对象时指向是整个集合(指List接口下的,下面不再反复说了)第一个元素的前面一个位置,之后它调用一次next方法或者调用一次previous方法就跳一个位置,每次跳的时候都是跳到两个元素之间的间隙里面,同时每次跳的时候都会将它跳过的那个对象拿在手里,调用remove操作或者set操作都是对这个拿在手里的对象进行操作;创建一个指定下标的ListIterator的时候,这个指针指向列表中对应下标元素的前面一个间隙里。

Comparable接口和Comparator接口

简单比较

这两个接口的作用都是给元素添加排序的参考依据,这两个接口提供参考依据的方式有点差别

自己的总结:compareTo方法调用的时候,里面要传入一个对象的,如果返回结构是调用对象减去参数的那个对象,升序,反之,参数的对象减去调用的对象,降序。compare方法中要传入两个对象,第一个参数对象减去第二个参数对象,升序,反之,第二个参数对象减去第一个参数对象,降序。

为什么要设计两套接口来实现排序功能

Comparable接口用于对象在设计的时候就考虑好会进行排序操作的了,这样的对象在创建好之后基本上就可以直接对它进行排序操作了,而Comparetor这个接口的话,我觉得老杜的资料里面的一句话说得很好,就是分离了排序算法和对象,可以实现灵活的排序方式,对同类的数据可以进行多种方式的排序。


参考资料: