JavaSE_15_集合框架(一)

文章介绍了Java集合框架的基础知识,包括集合框架的用途和主要接口,如List和Set。详细讲解了List集合的实现类ArrayList、LinkedList和Vector的特点,以及如何使用Lambda表达式进行集合操作。在Set集合部分,讨论了HashSet、LinkedHashSet和TreeSet的区别,以及Set的去重机制和自定义去重规则的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《集合框架(一)》

目录

  • 集合框架简介(掌握)
  • List集合(熟练)
  • Set集合(熟练)

一、集合框架简介

集合框架是一个用来代表和操纵集合的统一架构。Java 集合框架提供了一套性能优良、使用方便的接口和类(位于java.util包中), 包含了动态数组、链表、树、哈希表、图等多种数据结构与算法。

集合框架体系

请添加图片描述

概念解读

  • :泛型,指定元素类型(()传对象,<>传类型);
  • Iterator:迭代器,用于遍历集合及遍历时的元素操作;
  • List:允许重复元素存在的有序集合(添加顺序);
  • Set:不允许重复元素存在的无序集合(允许null值存在);
  • Map:不允许重复元素存在的键值对(k-v)集合;
  • Stack:栈(先进后出,后进先出);
  • Queen:队列(先进先出,后进后出);
  • Comparator/Comparable:比较器(指定TreeSet、TreeMap排序规则)。

通用方法

  • size():查看集合大小;
  • iterator():获取集合迭代器。

Lambda 表达式

  • Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
  • Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
  • 使用 Lambda 表达式可以使代码变的更加简洁紧凑。

二、List集合

主要实现类

  • ArrayList(动态数组):连续空间,查询快,增删慢;
  • LinkedList(链表):Node节点链,查询慢,增删快;
  • Vector(动态数组):线程同步(多线程下效率慢)。

List测试

  • 集合创建
List<String> list = new ArrayList<>();
  • 添加元素(add方法)
list.add("c");
list.add("b");
list.add("a");
list.add("a");
  • 查看集合大小(size方法)
System.out.println(list.size());
  • 移除元素(remove方法)
list.remove(0);     	//通过下标移除
list.remove("c");      //指定元素移除
  • List遍历
//1.下标遍历法
System.out.println("-------------------下标遍历法-------------------");
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

//2.for_each遍历法
System.out.println("-------------------for_each遍历法-------------------");
for (String x : list) {
    System.out.println(x);
}

//3.集合lambda表达式遍历法
System.out.println("-------------------集合lambda表达式遍历法-------------------");
list.forEach(x -> System.out.println(x));     //简写:list.forEach(System.out::println);

//4.迭代器(从前往后)
System.out.println("-------------------迭代器-------------------");
Iterator<String> it1 = list.iterator();
while (it1.hasNext()) {
    String x = it1.next();
    System.out.println(x);
}

//5.双向迭代器(从前往后+从后往前)
System.out.println("-------------------双向迭代器-------------------");
ListIterator<String> it2 = list.listIterator(list.size());
while (it2.hasPrevious()) {
    String x = it2.previous();
    System.out.println(x);
}

三、Set集合

主要实现类

  • HashSet:无序Set(普通)
  • LinkedHashSet:有序Set(添加顺序)
  • TreeSet:有序Set(自定义排序规则)

HashSet

Set<String> set = new HashSet<>();

set.add("c");
set.add("a");
set.add("b");
set.add("x");
set.add("k");
set.add(null);
set.add("a");		//重复则不添加

set.forEach(System.out::println);

执行结果

请添加图片描述

Set去重原理

Set集合添加新对象时,首先判断集合中是否存在与新对象相同的hashcode,如果不存在则添加,存在则进行equals内容比较。因此,想要自定义去重规则,就先要重写这两个方法。

  • User类
package com.hpr.entity;

import java.util.Objects;

public class User {

    private int id;
    private String name;
    private int age;

    //带参构造
    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return id == user.id;
    }
}
  • 测试类
Set<User> set = new HashSet<>();

set.add(new User(1001, "Alice", 18));
set.add(new User(1002, "Bob", 20));
set.add(new User(1003, "Clover", 22));
set.add(new User(1001, "Divid", 21));		//id重复的对象

set.forEach(System.out::println);

执行结果

请添加图片描述

LinkedHashSet

Set<String> set = new LinkedHashSet<>();

set.add("c");
set.add("a");
set.add("b");
set.add("x");
set.add("k");
set.add(null);

set.forEach(System.out::println);

执行结果

请添加图片描述

TreeSet

  • Comparator外部比较器
  • 测试类
Comparator<User> c = (o1, o2) -> o2.hashCode() - o1.hashCode();

Set<User> set = new TreeSet<>(c);
set.add(new User(1001, "Alice", 18));
set.add(new User(1002, "Bob", 20));
set.add(new User(1003, "Clover", 22));

set.forEach(System.out::println);

执行结果

请添加图片描述

  • Comparable内部比较器(自定义类实现该接口并重写compareTo方法)
...
public class User implements Comparable<User> {
    ...
    @Override
    public int compareTo(User o) {
        return o.id - this.id;
    }
}
  • 测试类
Set<User> set = new TreeSet<>();
set.add(new User(1001, "Alice", 18));
set.add(new User(1002, "Bob", 20));
set.add(new User(1003, "Clover", 22));

set.forEach(System.out::println);

执行结果

请添加图片描述

总结

重点

  1. 集合框架体系及常用接口;
  2. List集合主要实现类及区别;
  3. 集合遍历方式;
  4. Set集合主要实现类及区别;
  5. Set去重原理及实现手段。

难点

  1. 集合遍历方式;
  2. Set去重原理及实现手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值