当前位置: 首页 > news >正文

java复习 08

泛型和集合还有点没懂,赶紧学一下!!

1 集合概述

集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
集合类有很多,目前我们先学习一个:ArrayList

ArrayList<E>:

  • 可调整大小的数组实现。
  • <E>:是一种特殊的数据类型,泛型。

怎么用呢?
在出现 E 的地方我们使用引用数据类型替换即可!
举例:ArrayList<String>,ArrayList<Student>

ArrayList 构造方法和添加方法

方法名说明
public ArrayList()创建一个空的集合对象
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
package PTA_training.ArrayListTest;import java.util.ArrayList;
public class Main {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("name");arrayList.add("age");//        System.out.println(arrayList.add("name"));System.out.println("arrayList" + arrayList);}
}

 ArrayList 集合常用方法

方法名说明
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数
package PTA_training.ArrayListTest;import java.util.ArrayList;
public class Main {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("name");arrayList.add("age");System.out.println(arrayList.set(0,"name"));System.out.println(arrayList.size());
//        System.out.println(arrayList.add("name"));System.out.println("arrayList" + arrayList);}
}

 集合的遍历

案例:存储字符串并遍历

需求:创建一个存储字符串的集合,存储 3 个字符串元素,使用程序实现在控制台遍历该集合

思路:
① 创建集合对象
② 往集合中添加字符串对象
③ 遍历集合,首先要能够获取到集合中的每一个元素,这个通过 get (int index) 方法实现
④ 遍历集合,其次要能够获取到集合的长度,这个通过 size () 方法实现
⑤ 遍历集合的通用格式

for (int i=0; i < 集合对象.size (); i++){
集合对象.get (i) 就是指定索引处的元素
}
package PTA_training.ArrayListTest;import java.util.ArrayList;
public class Main {public static void main(String[] args) {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("name");arrayList.add("age");for (int i = 0; i < arrayList.size(); i++) {String s = arrayList.get(i);System.out.println(s);}}
}
//        System.out.println("arrayList" + arrayList);
//        System.out.println(arrayList.set(0,"name"));
//        System.out.println(arrayList.size());
//        System.out.println(arrayList.add("name"));

案例:存储学生对象并遍历

需求:创建一个存储学生对象的集合,存储 3 个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自于键盘录入~~
思路:
① 定义学生类,为了键盘录入数据方便,把学生类中的成员变量都定义为 String 类型
② 创建集合对象
③ 键盘录入学生对象所需要的数据
④ 创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
⑤ 往集合中添加学生对象
⑥ 遍历集合,采用通用遍历格式实现

public class Student {private String name;private String age;public Student(String name, String age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}@Overridepublic String toString() {return "Student{name='" + name + "', age='" + age + "'}";}
}
import java.util.ArrayList;
import java.util.Scanner;public class StudentDemo {public static void main(String[] args) {// 创建一次Scanner对象,在整个程序中复用Scanner scanner = new Scanner(System.in);// 创建ArrayList集合ArrayList<Student> studentList = new ArrayList<>();// 创建学生管理对象StudentManager manager = new StudentManager(studentList);// 键盘录入3个学生信息for (int i = 0; i < 3; i++) {System.out.println("请输入第" + (i + 1) + "个学生的姓名:");String name = scanner.nextLine();System.out.println("请输入第" + (i + 1) + "个学生的年龄:");String age = scanner.nextLine();// 创建学生对象并添加到管理类manager.addStudent(new Student(name, age));}// 关闭Scannerscanner.close();// 使用不同方式显示学生信息manager.displayStudentsUsingForLoop();System.out.println();manager.displayStudentsUsingEnhancedFor();}
}
import java.util.ArrayList;public class StudentManager {private ArrayList<Student> students;public StudentManager(ArrayList<Student> students) {this.students = students;}public void addStudent(Student student) {students.add(student);}// 方法一:使用传统for循环public void displayStudentsUsingForLoop() {System.out.println("==== 使用传统for循环遍历 ====");for (int i = 0; i < students.size(); i++) {System.out.println(students.get(i));}}// 方法二:使用增强for循环(更优雅)public void displayStudentsUsingEnhancedFor() {System.out.println("==== 使用增强for循环遍历 ====");for (Student student : students) {System.out.println(student);}}
}

 2 Collection

Java Collection 框架简介

Java Collection 框架是 Java 编程语言中用于存储和操作对象集合的统一架构。它提供了一套接口和实现类,使得处理数据集合变得更加高效和一致。

Collection 框架的核心接口

Java Collection 框架的核心接口包括:

  1. Collection - 所有集合的根接口,定义了基本操作
  2. List - 有序集合,允许重复元素
  3. Set - 不允许重复元素的集合
  4. Queue - 遵循 FIFO (先进先出) 原则的集合
  5. Deque - 双端队列,支持两端操作
  6. Map - 键值对映射集合,不直接继承 Collection 接口

常用实现类

根据不同的需求,Java 提供了多种实现类:

  1. ArrayList - 基于动态数组实现的 List
  2. LinkedList - 基于双向链表实现的 List 和 Deque
  3. HashSet - 基于哈希表实现的 Set
  4. TreeSet - 基于红黑树实现的有序 Set
  5. HashMap - 基于哈希表实现的 Map
  6. TreeMap - 基于红黑树实现的有序 Map
  7. PriorityQueue - 基于堆实现的优先队列

Collection 框架的特点

  1. 统一的 API - 所有集合类都遵循相同的设计模式
  2. 高性能 - 提供了高效的数据结构实现
  3. 泛型支持 - 类型安全的集合操作
  4. 多线程支持 - 提供了线程安全的实现
  5. 可扩展性 - 允许自定义实现

简单示例

下面是一个简单的 Java Collection 使用示例:

java

import java.util.*;public class CollectionExample {public static void main(String[] args) {// 创建一个ArrayListList<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");// 遍历ListSystem.out.println("List elements:");for (String fruit : list) {System.out.println(fruit);}// 创建一个HashMapMap<Integer, String> map = new HashMap<>();map.put(1, "One");map.put(2, "Two");map.put(3, "Three");// 遍历MapSystem.out.println("\nMap elements:");for (Map.Entry<Integer, String> entry : map.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}// 创建一个HashSetSet<String> set = new HashSet<>();set.add("Java");set.add("Python");set.add("Java"); // 重复元素,不会被添加// 遍历SetSystem.out.println("\nSet elements:");for (String language : set) {System.out.println(language);}}
}

这个示例展示了如何使用 Java Collection 框架中的 List、Map 和 Set 接口及其实现类。Collection 框架是 Java 编程中不可或缺的一部分,理解和掌握它对于编写高效的 Java 程序至关重要。

3 迭代器

迭代器(Iterator)简介

迭代器是一种设计模式,用于提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。在 Java 中,迭代器是java.util包中的一个接口,它是 Java 集合框架的重要组成部分。

Java 迭代器的核心接口

Java 提供了两种主要的迭代器接口:

  1. Iterator - 基本迭代器接口,支持单向遍历
  2. ListIterator - 扩展自 Iterator,支持双向遍历,仅用于 List 实现类

Iterator 接口的主要方法

  • boolean hasNext() - 如果迭代器还有下一个元素,返回 true
  • E next() - 返回迭代器的下一个元素
  • void remove() - 从底层集合中移除迭代器最后返回的元素

迭代器的优势

  1. 统一访问方式 - 提供了统一的方式遍历不同类型的集合
  2. 不暴露内部结构 - 无需了解集合的内部实现即可访问元素
  3. 安全遍历 - 在遍历过程中修改集合结构时提供 fail-fast 机制
  4. 简化代码 - 使代码更简洁、更易读

迭代器的使用示例

下面是一个简单的 Java 迭代器使用示例:

java

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class IteratorExample {public static void main(String[] args) {// 创建一个ArrayListList<String> fruits = new ArrayList<>();fruits.add("Apple");fruits.add("Banana");fruits.add("Cherry");fruits.add("Date");// 获取迭代器Iterator<String> iterator = fruits.iterator();// 使用迭代器遍历集合System.out.println("遍历集合:");while (iterator.hasNext()) {String fruit = iterator.next();System.out.println(fruit);// 可以在遍历过程中安全地移除元素if (fruit.equals("Banana")) {iterator.remove();}}// 移除元素后再次遍历System.out.println("\n移除Banana后再次遍历:");for (String fruit : fruits) {System.out.println(fruit);}}
}

ListIterator 的使用

ListIterator 是 Iterator 的子接口,提供了额外的功能:

java

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class ListIteratorExample {public static void main(String[] args) {List<String> colors = new ArrayList<>();colors.add("Red");colors.add("Green");colors.add("Blue");// 获取ListIteratorListIterator<String> listIterator = colors.listIterator();// 正向遍历System.out.println("正向遍历:");while (listIterator.hasNext()) {System.out.println(listIterator.next() + " - 位置: " + listIterator.previousIndex());}// 反向遍历System.out.println("\n反向遍历:");while (listIterator.hasPrevious()) {System.out.println(listIterator.previous() + " - 位置: " + listIterator.nextIndex());}// 在遍历过程中添加元素listIterator.add("Yellow");// 再次正向遍历System.out.println("\n添加Yellow后再次遍历:");while (listIterator.hasNext()) {System.out.println(listIterator.next());}}
}

迭代器的注意事项

  1. fail-fast 机制 - 大多数迭代器实现了 fail-fast 机制,当在迭代过程中检测到集合结构被修改时,会抛出ConcurrentModificationException
  2. 仅单向移动 - 基本 Iterator 只能单向移动,而 ListIterator 可以双向移动
  3. 性能考虑 - 不同的迭代器实现可能有不同的性能特性
  4. 多线程环境 - 在多线程环境中使用迭代器需要特别注意同步问题

迭代器是 Java 集合框架中一个非常重要的概念,它提供了一种统一且安全的方式来遍历集合元素,使代码更加简洁和健壮。

4 集合的使用步骤

public static void main(String[] args) {

        Collection<String> c = new ArrayList<String>(); //步骤 1: 创建集合对象

        String s = "itcast"; //步骤 2: 添加元素

        c.add(s); //步骤 2.2: 添加元素到集合

        c.add("itcast");

        Iterator<String> it = c.iterator();//步骤 3: 遍历集合

        while(it.hasNext()){        步骤 3.1: 通过集合对象获取迭代器对象
                 String s = it.next();     步骤 3.2: 通过迭代器对象的 hasNext () 方法判断是否还有元素
                 System.out.println(s);   步骤 3.3: 通过迭代器对象的 next () 方法获取下一个元素

                

        }

}

相关文章:

  • 企业如何科学的选择WMS仓储管理系统
  • 【Python打卡Day33】简单神经网络@浙大疏锦行
  • 多模态大语言模型arxiv论文略读(116)
  • 知识图谱和图数据库Neo4j
  • ETLCloud中数据生成规则使用技巧
  • DDoS攻防实战:从应急脚本到AI云防护系统
  • 系统入侵排查实战指南:从Windows到Linux的应急响应与溯源分析​
  • 6.10【Q】网络安全期末复习
  • Mac电脑 SSH客户端 - Termius
  • 【电路物联网】SDN架构与工作原理介绍
  • leetcode 135. 分发糖果
  • 由编译osgEarth源码引发的一系列问题(三)利用vcpkg安装osg与OSGEarth
  • Spring Boot 完整教程 - 从入门到精通(全面版)
  • Seaborn入门到上头:让数据可视化变成享受的艺术(附防秃指南)
  • 在WordPress中彻底关闭生成缩略图的方法
  • Python实现自动化识别蛋白-配体氢键
  • 爬取汽车之家评论并利用NLP进行关键词提取
  • Sentinel介绍
  • MongoDB入门指南:环境安装与基本操作
  • AR互动协助:开启企业协作新纪元​
  • 申请网站怎么申请/微信管理工具
  • 网站建设公司广东/优化seo可以从以下几个方面进行
  • 门户网站快速制作/凡科建站官网入口
  • 深圳企业做网站公司哪家好/百度引流平台
  • 模板网站怎么修改/山东seo多少钱
  • 青阳做网站/徐州百度seo排名