1.集合体系

Collection: 单列集合(每次存取都是单个元素)
List: 有序,有索引,元素可以重复
ArrayList: 底层逻辑是数组 好处 读写快 坏处 读写慢
LinkedList:底层逻辑是链表 好处 修改快 坏处 读写慢
Set: 无序,无索引,元素不可重复
HashSet:
TreeSet:

Map: 双列集合(每次存取都是一对元素)
TreeMap:
HashMap:

 

2.Collection

2.1 集合概述

概念: 是单例集合的顶层接口,集合中一次只能存取一个元素
方法:
public boolean add(E e) //添加元素
   public boolean remove(Object o)    //从集合中移除指定的元素
   public boolean removeIf(Object o) //根据条件进行删除
   public void clear() //清空集合
   public boolean contains(Object o) //判断集合中是否存在指定的元素
   public boolean isEmpty() //判断集合是否为空
   public int size() //集合的长度,也就是集合中元素的个数

 

2.2 迭代器(了解)

① 概述
介绍: 迭代器又名遍历器,专门用于集合的遍历
获取:
Iterator<E> it = 集合对象.iterator():
使用:
public boolean hasNext():  //判断集合中是否还有下一个元素
public E next():   //指针往后移动一次,并且返回下一个元素
public void remove();   //删除指针指向的那个元素(指针指向谁,就删除谁)
注意:
   1.一个迭代器对象只能使用一次,如果想再次遍历,就重新获取迭代器对象
   2.当使用迭代器进行遍历的时候,不允许对原始集合进行了添加或删除,如果非要删除,只能通过迭代器进行删除
② 案例
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");

//1.获取迭代器对象
Iterator<String> it = list.iterator();
//2.循环判断是否还有下一个元素
while (it.hasNext()){
   //3.获取下一个元素
   String next = it.next();
   //4.打印
   System.out.println(next);
}

 

2.3 增强for(掌握)

概述: 增强for是专门用来遍历"集合""数组". 遍历集合时,底层是"迭代器". 遍历数组时,底层是"普通for循环".
格式:
for(元素类型 变量名 : 集合/数组){
//"变量名"中存储着"集合或数组"中的每个元素
}
注意:
使用"集合或数组.for"快捷键,可以快速生成增强for循环

 

 

3.List集合

3.1 相关概述

特点: List集合是"有序,有索引,元素可以重复".
方法:
public void add(索引位置, 要添加元素); //在指定索引位置上,插入元素
public 被删除元素 remove(索引位置); //删除指定索引位置上的元素,并且把"被删除元素"返回
public 旧元素 set(索引位置, 新元素);   //修改指定索引位置上的元素,并且把"被修改元素"返回
public 元素 get(索引位置);  //获取指定索引位置上的元素

3.2 常用子类

分类:
  ArrayList: 底层是"数组",所以查询快,增删慢.
  LinkedList: 底层是"链表",所以查询慢,增删快.
结论:
1.如果数据查询比较多,增删比较少,就用ArrayList
2.如果数据查询比较少,增删比较多,就用LinkedList
3.如果啥都不知道,那就用ArrayList.

 

4.Set

4.1 相关概述

特点: Set集合是"无序,无索引,元素不可重复".
子类:
TreeSet: 底层是"红黑树".该结构要求"元素排序"
HashSet:        

4.2 元素排序

① 自然排序
概述: 所谓的自然排序,就是让元素本身能够自己排序
步骤:
1.让"元素所在的类"实现Comparable接口
2.重写compareTo方法
如果方法返回值是负数: "新添加元素"比"集合已有元素"小,"新添加元素"放在左边(前边)
如果方法返回值是0:   "新添加元素"和"集合已有元素"相同,"新添加元素"不再添加
如果方法返回值是正数: "新添加元素"比"集合已有元素"大,"新添加元素"放在右边(后边)
② 比较器排序

 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序

 

  • 两种比较方式小结

    • 自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序

    • 比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序

    • 在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序

  • 两种方式中关于返回值的规则

    • 如果返回值为负数,表示当前存入的元素是较小值,存左边

    • 如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存

    • 如果返回值为正数,表示当前存入的元素是较大值,存右边

 

1.Set

1.1 相关概述

特点: Set集合是"无序,无索引,元素不可重复".
子类:
TreeSet: 底层是"红黑树".该结构要求"元素排序"
HashSet: 底层是"哈希表".该结构要求"元素必须重写hashCode和equals方法"    
扩展:
LinkedHashSet: LinkedHashSet是HashSet的子类.它的要求和HashSet一样.LinkedHashSet是Set集合中唯一有序的集合.

1.2 元素排序

① 自然排序
概述: 所谓的自然排序,就是让元素本身能够自己排序
步骤:
1.让"元素所在的类"实现Comparable接口
2.重写compareTo方法. 方法中:this代表新添加元素,o代表集合已有元素
如果方法返回值是负数: "新添加元素"比"集合已有元素"小,"新添加元素"放在左边(前边)
如果方法返回值是0:   "新添加元素"和"集合已有元素"相同,"新添加元素"不再添加
如果方法返回值是正数: "新添加元素"比"集合已有元素"大,"新添加元素"放在右边(后边)
② 比较器排序
概述: 所谓的比较器排序,就是人为指定排序规则
步骤:







1.创建TreeSet集合时,给TreeSet的构造方法中传递"Comparator的匿名内部类".
2.在匿名内部类内部重写compare方法. 方法中:o1代表新添加元素,o2代表集合已有元素
如果方法返回值是负数: "新添加元素"比"集合已有元素"小,"新添加元素"放在左边(前边)
如果方法返回值是0:   "新添加元素"和"集合已有元素"相同,"新添加元素"不再添加
如果方法返回值是正数: "新添加元素"比"集合已有元素"大,"新添加元素"放在右边(后边)
③ 注意事项
如果既有"自然排序",又有"比较器排序",则遵循"比较器排序"规则.

 

 

2.数据结构(了解)

2.1 树形结构

二叉树: 任意一个节点最多有2个子节点的树形结构,就称之为"二叉树".
二叉查找树: 任意一个节点的左子节点比自己小,右子节点比自己大,的二叉树,被称之为"二叉查找树".也叫"二叉搜索树,二叉排序树"
平衡二叉树: 任意节点的左右子树的高度差不能超过1.
红黑树: 红黑树是遵守自己的"红黑规则"的二叉查找树. TreeSet的底层就是"红黑树".

2.2 哈希表

概述: 相当于新华字典,由"目录"和"数据"共同组成.
注意:
JDK7之前: Hash表 = 数组 + 链表;
JDK8之后: Hash表 = 数组 + 链表 + 红黑树; 链表长度>8时,会自动变为红黑树
 

 

 

5.集合补充

5.1.数据结构

概述: 数据存储的方式. 不同的数据存储方式,就称之为"不同的数据结构"
分类:
栈: 先进后出,后进先出.
队列: 先进先出,后进后出.
数组: 查询快,增删慢.
链表: 查询慢,增删快.

 

5.2.泛型<T>

① 概述
概述: 泛型本质上是一个"存储数据类型"的变量.
场景:
public class 类名<T>{ ... } //可以定义在类上
public interface 接口名<T>{ ... } //可以定义在接口上
② 应用
赋值: 在创建类的对象时,给泛型赋值.
注意:
1.泛型只能赋值为引用数据类型
2.如果不给泛型赋值,则泛型为Object类型.
3.泛型可以定义在任何需要"数据类型"的地方.
4.当泛型被赋值后,泛型会自动变为对应的数据类型.
 

 

posted on 2022-10-24 11:47  神奇的阿久  阅读(44)  评论(0)    收藏  举报