美文网首页
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
    

    相关文章

      网友评论

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

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