java集合框架复习----(2)List

简介: 这篇文章是关于Java集合框架中List集合的详细复习,包括List的特点、常用方法、迭代器的使用,以及ArrayList、Vector和LinkedList三种实现类的比较和泛型在Java中的使用示例。

文章目录

    • 三、List集合
    • listIterator:迭代器
    • List实现类
    • 1、泛型类
    • 2、泛型接口

三、List集合

特点

  • 有序,打印输出的顺序和添加时的顺序一致(不会帮你自动排序)
  • 有下标,可以通过下标的形式访问对象
  • 元素可以重复

方法

  • void add(int index,Object o) //在index位置插入元素
  • boolean addAll(int index,Collection c) //将一个集合中的元素添加到次集合中的index位置
  • Object get(int index) //返回集合中指定位置的元素
  • List subList(int fromIndex,int toIndex) //返回二者之间的元素
package com.zheng.demo1;

import java.util.ArrayList;
import java.util.ListIterator;

public class MyList2 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(2);
        list.add(3);
        list.add(1);
        list.add(5);
        list.add(2);
        list.add(4);

        System.out.println("通过下标访问:" + list.get(0));

        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            System.out.println(listIterator.next());
        }
    }
}

在这里插入图片描述

listIterator:迭代器

hasNext(); 查看是否有下一个元素。有为true,无为false

  • next(); 取出下一个元素的值
  • hasPrevious();查看前一个元素是
  • previous();取出前一个元素
  • remove(); 删除当前元素
package com.zheng.demo1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class MyList {
    public static void main(String[] args) {
        //创建一个list集合容器
        List list = new ArrayList();

        //添加数据
        list.add("1-小红");
        list.add("2-小黑");
        list.add("3-小青");
        list.add("4-小紫");

        System.out.println("当前集合大小" + list.size());

        //一般的遍历
        System.out.println("=========一般的遍历=======");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));

        }
        System.out.println("=========增强for循环遍历=======");
        //增强for循环遍历
        for (Object o : list) {
            System.out.println(o);

        }

        System.out.println("=========一般的迭代器遍历=======");
        //一般的迭代器遍历
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        System.out.println("=========list迭代器从前到后遍历=======");
        //list特有的
        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            String str = (String) listIterator.next();
            System.out.println(str);
        }

        System.out.println("=========list迭代器从后到前遍历=======");
        while (listIterator.hasPrevious()) {
            Object obj = listIterator.previous();
            System.out.println(obj);
        }

    }
}

在这里插入图片描述

List实现类

1、ArrayList【重点】

  • 数据结构实现,查询快(数组是连续的存储地址)。增删慢(每增加或者删除都要移动大量的数据。末尾快一点)
  • jdk1.2版本。运行效率高,线程不安全

2、Vector:

  • 数组结构,查询快,增删慢
  • jdk1.0版本,运行效率低,线程安全

3、LinkedList

  • 链表结构实现,增删快(不连续的存储空间,只需要改变节点之间的指向)查询慢
package com.zheng.demo1;

import java.util.LinkedList;
import java.util.ListIterator;

public class MyLinkList {

    public void print(LinkedList<Student> students) {
        //迭代器遍历
        System.out.println("======迭代器遍历======");
        ListIterator<Student> studentListIterator = students.listIterator();
        while (studentListIterator.hasNext()) {
            Student student = studentListIterator.next();
            System.out.println(student);
        }
    }

    public static void main(String[] args) {
        MyLinkList myLinkList = new MyLinkList();

        //1、创建一个容器
        LinkedList<Student> students = new LinkedList<>();

        //2、创建对象
        Student student1 = new Student(1, "小黑", "周口");
        Student student2 = new Student(2, "小名", "沈丘");
        Student student3 = new Student(3, "小郑", "范营乡");
        Student student4 = new Student(4, "小芳", "666");

        //3、将对象加入集合
        students.add(student1);
        students.add(student2);
        students.add(student3);
        students.add(student4);

        //查看
        System.out.println(students.toString());

        //调用迭代器遍历
        myLinkList.print(students);

        //删除
        System.out.println("=====删除某个元素=====");
        students.remove(1);
        myLinkList.print(students);


    }
}

在这里插入图片描述
四、泛型
jdk1.5中引入的新特性。本质是参数化类型,把类型当做参数传递

  • 泛型接口、泛型方法、泛型类
  • T为占位符,表示一种引用类型
  • 优点:(1)、提高代码的复用。(2)、防止类型转换异常,提高代码的安全性

1、泛型类

泛型变量

  • 泛型作为传递的参数
  • 泛型作为方法的返回值

注意:

  • 泛型只能使用引用类型
  • 不同泛型类型对象之间不能相互赋值
package com.zheng.demo2;

//泛型类
public class MyGeneric<T> {

    T t;//1、泛型变量

    //2、泛型作为传递的参数
    public void show(T t) {
        System.out.println(t);
    }

    //3、泛型作为方法的返回值
    public T getT() {
        return t;
    }
}
package com.zheng.demo2;

public class TestMyGeneric {

    public static void main(String[] args) {
        //使用泛型类创建对象
        MyGeneric<String> sm = new MyGeneric<>();
        sm.t = "你好";
        sm.show("呦呦呦");
        System.out.println(sm.getT());

        System.out.println("=============");

        MyGeneric<Integer> im = new MyGeneric<>();
        im.t = 999;
        im.show(666);
        System.out.println(im.getT());


    }
}

在这里插入图片描述

2、泛型接口

package com.zheng.demo2;

public interface MyInterface<T> {
    T show(T t);
}

实现类

package com.zheng.demo2;

public class MyInterfaceImpl1 implements MyInterface<Integer>{

    @Override
    public Integer show(Integer integer) {
        return integer;
    }

    public static void main(String[] args) {
        MyInterfaceImpl1 impl1 = new MyInterfaceImpl1();
        System.out.println(impl1.show(999));
    }


}

在这里插入图片描述
2、

package com.zheng.demo2;

public class MyInterfacetImpl implements MyInterface<String>{
    public String show(String s) {
        return s;
    }

    public static void main(String[] args) {
        MyInterface omf = new MyInterfacetImpl();
        System.out.println(omf.show("hhhhhh"));
    }
}

在这里插入图片描述
3、

package com.zheng.demo2;

public class MyInterfaceImpl2<T> implements MyInterface<T> {

    @Override
    public T show(T t) {
        return t;
    }

    public static void main(String[] args) {
        MyInterfaceImpl2<String> impl2 = new MyInterfaceImpl2<>();
        System.out.println(impl2.show("daoajao"));
        System.out.println("============");
        MyInterfaceImpl2<Double> impl21 = new MyInterfaceImpl2<>();
        System.out.println(impl21.show(520.1313));
    }
}

在这里插入图片描述
3、泛型方法

package com.zheng.demo2;

public class MyGenericMethod {

    //泛型方法
    public <T> T show(T t) {
        System.out.println("泛型方法" + t);
        return t;
    }


    public static void main(String[] args) {
        System.out.println(new MyGenericMethod().show(5));
        System.out.println("=============");
        System.out.println(new MyGenericMethod().show("哈哈哈哈"));
    }
}

在这里插入图片描述

相关文章
|
1月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
193 100
|
1月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
215 101
|
1月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
952 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
1月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
8天前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
17天前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
77 8
|
17天前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
49 7
|
16天前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
85 3
|
9天前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
1月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。

热门文章

最新文章