美文网首页
JavaSE进阶(集合泛型)

JavaSE进阶(集合泛型)

作者: 扶光_ | 来源:发表于2023-08-11 20:45 被阅读0次

一,集合

  • Collection 单例集合,每个元素(数据)只包含一个值
张三 李四
  • Map双列集合,每个元素包含两个值(键值对)
张三 北京
李四 上海
Collcetion集合
  • List系列集合:添加的元素是有序,可重复,有索引
    • Array,LinkedList:有序,可重复,有索引
  • Set系列集合:添加的元素是无序,不重复,无索引
    • HashSet:无序,不重复,无索引
    • LinkedHashSet:有序,不重复,无索引
    • TreeSet:按照大小默认升序排序,无索引,不重复

集合和类型都只支持引用类型数据,不支持基本数据类型
如果要存储基本类型数据,就要用包装类
Collection<Integer> list = new ArrayList<>();

二,Collection集合的常用API

  • 1.添加元素,添加成功返回true
    list.add("张三");

  • 2清空集合所有元素
    list.clear()

  • 3判断集合是否为空,为空true
    list.isEmpty()

  • 4获取集合大小,返回int
    list.size()

  • 5是否包含某个元素,包含true
    list.contains("张三");

  • 删除某个元素,如有相同的,默认删第一个
    list.remove("张三");

  • 7集合转换成数组
    Object[] arr = list.toArray();

  • 8 addAll 将clist2集合元素全部导入list1中
    list1.addAll(list2);

1 迭代器Iterator

是集合专用的遍历方式
Iterator<String> it =list.Iterator;
String ele = it.next();
sout(ele)//只能输出一个 要想全部遍历需要循环

while(it.hasNext())//询问有没有这个元素
{
    String ele = it.next();
    system.out.println(ele);
}

2 foreach遍历

既可以遍历集合也可以遍历数组
内部原理是迭代器,遍历集合相当于迭代器简化写法
实现Iterator接口的类才可以实现,Collection接口已实现

Collection<String> c = new ArrayList<>();
for(String ele:list){
    system.out.println(ele);
  }

3 lambda表达式遍历

list.forEach(s->{
system.out.println(s);
})

三,集合存储自定义类型的对象

如存储一些学生对象,老师对象,动物对象..
Collection<Student> student = new ArrayList<>();

四,常见的数据结构

数据结构是计算机底层存储,组织数据的格式.指数据相互之间是以什么方式排列在一起的。

先进后出,如弹夹存储子弹

队列

就是排队 ,先进先出

数组(查询快,增删慢)

根据索引查询速度快
删除效率低,因为数组后面的元素需要前移
添加效率低

链表

内存中不连续存储的,每个元素节点包含数据值和下一个元素的地址
查询慢 因为无论查询那个数据都要从第一个开始
增删快

二叉树

  • 二叉查找树(小的存左边,大的存右边) 从左向右依次变大(提高检索数据性能)

平衡二叉树

在满足查找二叉树的规则小,尽可能让树变得矮小,提高查数据性能

红黑树

通过红黑规则来实现的

  • 每个节点是红或黑色的,根节点必须是黑色

四,List集合(ArrayList,LinkdList)

  • 有序:存储和取出元素顺序一致
  • 有索引:可以通过索引操作元素
  • 可重复:存储的元素可以重复
    ArrayList是基于数组实现的,查询快,增删慢
    LinkdLis底层基于双链表实现的查询慢,增删首尾非常快
List <String> list = new ArrayList<>();
在某个索引位置插入元素
list.add(2,"18");
//删除某个位置元素
list.remove(2);
//根据索引获取元素
String rs = list.get(2);
//修改索引位置的元素
list.set(1,"修改的值");

list遍历集合的四种方式

  • 1迭代器
  • 2forEach()
  • 3lambda表达式
  • 4for循环(因为有索引)

LinkedList集合特有功能

LinkedList<String> queue = new LinkedList<>();
//入队
queue.addLast("1");
//出队
queue.removeFirst();

入栈push()
出栈pop()

并发修改异常

从集合中的一批元素中找出某些数据并删除,如何操作,是否存在问题
解决:需要边遍历边删除会出现异常问题

用迭代器进行遍历删除时,用it,remove()删除,
用集合list.remove(ele);会出毛病

for循环删除必须从后面遍历元素才可以

五,泛型

泛型类

格式:修饰符class 类名<泛型变量>{}

public class ArrayList<T>{} //E T K V

相关文章

  • Java 学习路线

    JavaSE 基础语法 面向对象 异常处理 常用类(包装类、String) 集合框架及泛型 IO 流 多线程 网络...

  • C#基础提升系列——C#集合

    C#集合 有两种主要的集合类型:泛型集合和非泛型集合。 泛型集合被添加在 .NET Framework 2.0 中...

  • JavaSE Day13 泛型集合

    1. 什么是泛型?(很经典的总结,重要) 将类型变成参数,提高代码的复用率 2. 有泛型类型 Box,那么 ...

  • JavaSE Day14 泛型集合

    1. Java 集合中的 trimToSize() 和 ensureCapacity(int minCapacit...

  • JavaSE Day15 泛型集合

    1. 泛型的使用限制?(暂时只要了解) 2. Supplier 有什么用? 可以实现短路功能(类似于 && 或者 ...

  • Java—泛型详解和使用

    1 泛型介绍 1.1 泛型的出现   泛型的出现还得从集合说起,没有泛型的时候,我们将一个对象存入集合时,集合不c...

  • 四、Java高级--1、泛型

    泛型定义:数据类型参数化,提前定义好集合中放入什么类型集合框架中没使用泛型和使用泛型的比较 泛型规则和限制1、泛型...

  • iOS 强大的泛型

    文章围绕一下五点进行介绍: 泛型是什么为什么要用泛型泛型怎么用泛型进阶泛型的延伸使用 泛型(Generics)是什...

  • java的泛型机制

    <1>:java的泛型机制是javase1.5引入的 <2>:泛型擦除的概念:java中的泛型在编译之后生成的字节...

  • JDK5的新特性

    可变参数 格式: 注意 静态导入 泛型 泛型类: 泛型方法: 泛型接口: 增强for 在 集合_List 中有...

网友评论

      本文标题:JavaSE进阶(集合泛型)

      本文链接:https://www.haomeiwen.com/subject/otctmdtx.html