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("哈哈哈哈"));
    }
}

在这里插入图片描述

相关文章
|
2月前
|
消息中间件 算法 安全
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
2月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
271 70
|
13天前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
25 4
|
16天前
|
存储 安全 Java
现代应用场景中 Java 集合框架的核心技术与实践要点
本内容聚焦Java 17及最新技术趋势,通过实例解析Java集合框架的高级用法与性能优化。涵盖Record类简化数据模型、集合工厂方法创建不可变集合、HashMap初始容量调优、ConcurrentHashMap高效并发处理、Stream API复杂数据操作与并行流、TreeMap自定义排序等核心知识点。同时引入JMH微基准测试与VisualVM工具分析性能,总结现代集合框架最佳实践,如泛型使用、合适集合类型选择及线程安全策略。结合实际案例,助你深入掌握Java集合框架的高效应用与优化技巧。
38 4
|
16天前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
73 3
|
6月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
111 3
|
3月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
Java 中数组Array和列表List的转换
|
2月前
|
Java
Java LinkedList集合的深度剖析
总的来说,我希望像说故事一样讲解Java LinkedList集合的使用和实现原理,让有些许枯燥的编程知识变得趣味盎然。在这个“公交车”故事中,你不仅熟悉了LinkedList集合的实现和使用,而且还更深入地理解了数据结构中的链表。链表可能会因为插入和删除的便利性而被选用,虽然它的查找效率并不高,但是在很多场景中仍然十分有效。这就像公交车,虽然它速度不快,但却是城市出行的重要工具。
65 8
|
3月前
|
机器学习/深度学习 人工智能 Java
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
190 3
|
2月前
|
存储 安全 Java
Java 集合框架详解:系统化分析与高级应用
本文深入解析Java集合框架,涵盖List、Set、Map等核心接口及其常见实现类,如ArrayList、HashSet、HashMap等。通过对比不同集合类型的特性与应用场景,帮助开发者选择最优方案。同时介绍Iterator迭代机制、Collections工具类及Stream API等高级功能,提升代码效率与可维护性。适合初学者与进阶开发者系统学习与实践。
81 0
下一篇
oss创建bucket