菜鸟拙见,望请纠正:附上JDK参考文档:链接:https://pan.baidu.com/s/1eLqG4eTXYSTY1-IxMQqA4Q 密码:33x0 以及算法篇全文链接 https://www.cnblogs.com/nullering/p/9536339.html
一:前言
说完了数据结构的基础认知,我想扯一个外传——Java的集合。Java的集合只是一些能够盛放对象的容器,而这些容器的实现,则是用了不同的数据结构,我们在使用Java语言时,这些集合类就是我们最好的工具。
如图所示,这是Java的集合的抽象类和具体的实现类,抽象接口类不能实例化,必须由具体实现类进行实例化操作。


二:List接口及其实现类ArrayList
List是元素有序并且可以重复的集合,被称为序列
List可以精确的控制每个元素的插入位置,或删除某个位置元素
基本操作:
(1)、添加
void add(int Index , E element):在list的指定位置插入元素
void addAll(int index , Collection<? Extends E> e):将指定collection中的所有元素插入到列表中的指定位置
(2)、删除
E remove(int Index):删除指定位置的元素,并返回该元素;
(3)、修改
E set(int index , E element):替换指定位置的元素,并返回被替换的元素
(4)、获取
Int indexOf(Object o):返回指定元素第一次出现的索引,如果该list中不含则返回-1;
E get(int Index):返回指定位置的元素;
List<E> sublist(int fromIndex , int toIndex):返回列表指定的fromIndex(包括)和toIndex(不包括)之间的部分视图(list);
实现类ArrayList(常用)
ArrayList——数组序列,是List的一个重要实现类
ArrayList底层是由数组实现的,可以动态增加容量
具体操作参考JDK参考文档

实现类LinkedList
LinkedList是基于链表实现的,是一个双向循环列表。不是线程安全的。
具体操作参考JDK参考文档

三:Set接口及其实现类

集合Set是Collection的子接口,Set不允许其数据元素重复出现,也就是说在Set中每一个数据元素都是唯一的。
虽然集合号称存储的是 Java 对象,但实际上并不会真正将 Java 对象放入 Set 集合中,只是在 Set 集合中保留这些对象的引用而言。也就是说:Java 集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的 Java 对象。
基本操作:

实现类HashSet(常用)
HashSet通过Hash算法排布集合内的元素,所谓的Hash算法就是把任意长度的输入(又叫做预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射。对于不同类型的信息,其散列值公式亦不完全相同。
当我们使用HashSet存储自定义类时,需要在自定义类中重写equals和hashCode方法,主要原因是集合内不允许有重复的数据元素,在集合校验元素的有效性时(数据元素不可重复),需要调用equals和hashCode验证。
具体方法请参考说明文档

实现类TreeSet
TreeSet可以确保集合元素处于排序状态。TreeSet采用红黑树的数据结构来存储集合元素。
TreeSet会调用集合元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合元素按升序排列,这种方式是自然排序。
Java提供了一个Comparable接口,该接口定义一个compareTo(Object o)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现该接口的类的对象就可以比较大小。当一个对象调用该方法与另一个对象进行比较时,例如:obj1.compareTo(obj2),如果该方法返回0,则代表这两个对象相等;如果该方法返回一个正整数,则表明obj1大于obj2;如果该方法返回一个负整数,则表明obj1小于obj2。
1 @Override 2 public int compare(People o1, People o2) { 3 //先按年龄比较,如果年龄相等,则按姓名4 if(o1.getAge()==o2.getAge())
