7.16 Java基础 | 集合框架(上)

发布于:2025-07-17 ⋅ 阅读:(22) ⋅ 点赞:(0)

  今天我看的菜鸟教程学的,也看了一些相关视频,下边把整体的框架大概总结一下,以便以后复习。

目录

【1】主体:

一、核心接口(Interfaces)

二、实现类(Classes)

三、工具类(Utility Classes)

四、迭代器(Iterator)

五、框架特点

【2】细分:

ArrayList常用方法:

一、基本操作方法

二、查找与判断方法

三、集合转换方法

四、迭代与遍历方法

五、其他常用方法

示例代码

注意事项

【3】排序

数组排序:

1、普通升序排序

2、自定义排序

3、lambda实现升序

集合排序: 

【4】Set集合

Set常用方法:

蓝桥云课题目练习:

提示:

【5】Map集合

明天继续..... 


【1】主体:

集合框架重点:

List   Set   Map   Stack   Queue

集合框架可以直接使用各种数据结构和算法,更加高效,这是我们选择使用它的原因。

Collection接口集合框架的关系:

1、Collection接口集合框架层次结构的根接口,子接口有:

 List接口   Set接口        Queue接口        Map接口        Iterator接口

一、核心接口(Interfaces)

这些接口定义了集合的基本行为,是框架的基础:

  1. Collection:所有集合类的根接口,定义了通用操作(如添加、删除、遍历元素等)。

    • 主要子接口:
      • List:有序集合(元素有索引),允许重复元素,支持随机访问。
        • 典型实现类:ArrayListLinkedListVector 等。
      • Set:无序集合(无索引),不允许重复元素(通过 equals() 和 hashCode() 判断)。
        • 典型实现类:HashSetTreeSet(有序)、LinkedHashSet(保持插入顺序)等。
      • Queue:队列接口,遵循 “先进先出(FIFO)” 原则,用于处理排队元素。
        • 典型实现类:LinkedList(双端队列)、PriorityQueue(优先级队列)等。
      • Deque:双端队列接口,允许在两端添加 / 删除元素,扩展了 Queue
        • 典型实现类:ArrayDequeLinkedList 等。
  2. Map:键值对(Key-Value)集合,键(Key)唯一,值(Value)可重复,与 Collection 接口并列(不属于其子接口)。

    • 典型实现类:HashMapTreeMap(按键排序)、LinkedHashMap(保持插入顺序)、Hashtable 等。

二、实现类(Classes)

基于上述接口的具体实现,提供了不同的数据结构特性:

接口 实现类 核心特点
List ArrayList 基于动态数组,查询快(随机访问),增删慢(需移动元素)
LinkedList 基于双向链表,增删快(无需移动元素),查询慢(需遍历)
Vector 线程安全的动态数组(效率较低,已被 ArrayList 替代)
Set HashSet 基于哈希表,无序,查询 / 增删效率高(平均 O (1))
TreeSet 基于红黑树,元素自然排序或自定义排序,查询 / 增删效率 O (log n)
LinkedHashSet 继承 HashSet,通过链表保持插入顺序,兼具哈希表和链表特性
Queue PriorityQueue 基于堆结构,元素按优先级排序(默认自然排序)
Deque ArrayDeque 基于动态数组的双端队列,效率高于 LinkedList
Map HashMap 基于哈希表,键无序,查询 / 增删效率高(非线程安全)
TreeMap 基于红黑树,键自然排序或自定义排序,支持按范围查询
LinkedHashMap 继承 HashMap,通过链表保持键的插入顺序或访问顺序(可实现 LRU 缓存)
Hashtable 线程安全的哈希表(效率低,已被 ConcurrentHashMap 替代)

三、工具类(Utility Classes)

提供对集合的操作方法,简化开发:

  1. Collections:针对 Collection 和 Map 的工具类,包含排序(sort())、查找(binarySearch())、同步化(synchronizedList())等静态方法。
  2. Arrays:用于数组操作的工具类,可将数组转换为集合(asList()),也提供排序、查找等方法。

四、迭代器(Iterator)

用于遍历集合元素的接口,避免暴露集合内部结构:

  • Iterator:所有 Collection 集合的迭代器,支持 hasNext()(判断是否有下一个元素)、next()(获取下一个元素)、remove()(删除当前元素)。
  • ListIteratorList 接口特有的迭代器,支持双向遍历和修改元素(如 add()set())。

五、框架特点

  1. 统一性:通过接口定义统一行为,不同实现类可灵活替换。
  2. 高效性:针对不同场景提供优化实现(如 ArrayList 适合查询,LinkedList 适合增删)。
  3. 扩展性:允许自定义集合类,只需实现相应接口即可融入框架。

【2】细分:

ArrayList常用方法:

一、基本操作方法

  1. 添加元素

    • add(Eelement):将元素添加到列表末尾。
    • add(int index, E element):在指定索引位置插入元素(原元素后移)。
    • addAll(Collection<? extends E> c):将另一个集合的所有元素添加到列表末尾。
    • addAll(int index, Collection<? extends E> c):从指定索引开始插入另一个集合的元素。
  2. 获取元素

    • get(int index):返回指定索引位置的元素。
    • size():返回列表中元素的数量。
    • isEmpty():判断列表是否为空。
  3. 删除元素

    • remove(int index):删除指定索引位置的元素,并返回被删除的元素。
    • remove(Object o):删除列表中第一个出现的指定元素(通过equals()判断)。
    • removeAll(Collection<?> c):删除列表中所有包含在指定集合中的元素。
    • clear():清空列表中的所有元素。
  4. 修改元素

    • set(int index, E element):替换指定索引位置的元素为新元素,并返回原元素。

二、查找与判断方法

  1. 查找元素位置

    • indexOf(Object o):返回指定元素第一次出现的索引,若不存在则返回 - 1。
    • lastIndexOf(Object o):返回指定元素最后一次出现的索引,若不存在则返回 - 1。
  2. 判断元素存在

    • contains(Object o):判断列表是否包含指定元素(通过equals()判断)。
    • containsAll(Collection<?> c):判断列表是否包含指定集合中的所有元素。

三、集合转换方法

  1. 转换为数组

    • toArray():返回包含列表所有元素的Object[]数组。
    • toArray(T[] a):返回包含列表所有元素的指定类型数组(需传入同类型空数组)。
  2. 转换为其他集合

    • 可通过构造函数转换为其他集合,例如:

      java

      List<String> list = new ArrayList<>();
      Set<String> set = new HashSet<>(list); // 将ArrayList转换为HashSet
      

四、迭代与遍历方法

  1. 迭代器

    • iterator():返回用于遍历列表的Iterator迭代器。
    • listIterator():返回支持双向遍历的ListIterator迭代器。
  2. 遍历示例

    java

    ArrayList<String> list = new ArrayList<>();
    // 方式1:普通for循环(通过索引)
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
    // 方式2:增强for循环
    for (String element : list) {
        System.out.println(element);
    }
    // 方式3:迭代器(支持删除操作)
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
        iterator.remove(); // 删除当前元素
    }
    // 方式4:Java 8 Stream API
    list.forEach(element -> System.out.println(element));
    

五、其他常用方法

  1. 调整容量

    • trimToSize():将列表的容量调整为当前元素数量,减少内存占用。
    • ensureCapacity(int minCapacity):确保列表的容量至少为指定值,避免频繁扩容。
  2. 截取子列表

    • subList(int fromIndex, int toIndex):返回从fromIndex(包含)到toIndex(不包含)的子列表(视图,非复制)。
  3. 排序

    • sort(Comparator<? super E> c):根据指定比较器对列表元素进行排序(Java 8+)。

      java

      list.sort((a, b) -> a.compareTo(b)); // 升序排序
      

示例代码

java

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
    public static void main(String[] args) {
        // 创建ArrayList并添加元素
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add(1, "Cherry"); // 在索引1处插入元素

        // 获取元素
        System.out.println(fruits.get(0)); // 输出:Apple
        System.out.println(fruits.size());  // 输出:3

        // 修改元素
        fruits.set(1, "Blueberry");

        // 删除元素
        fruits.remove("Banana");

        // 判断元素存在
        System.out.println(fruits.contains("Apple")); // 输出:true

        // 遍历元素
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

注意事项

  • 线程安全ArrayList 是非线程安全的,若需在多线程环境使用,可改用 Vector 或通过 Collections.synchronizedList() 包装。
  • 性能特点:适合随机访问(get/set 效率高),但插入 / 删除操作在中间位置效率较低(需移动元素)。

【3】排序

数组排序:

1、普通升序排序

Arrays.sort(int []a);

2、自定义排序

Arrays.sort(int []a,comparator<T>c);

package day716;
import java.util.Arrays;
import java.util.Comparator;
public class 数组列表排序 {
	public static void main(String[] args) {
		Integer[] a= {3,21,56,3,67,8,5,4};
		//sort()排序
		 Arrays.sort(a); 
		 for(int i:a) { System.out.print(i+" "); }
		//自定义排序
		Arrays.sort(a,new Comparator<Integer>(){
			@Override
			public int compare(Integer o1, Integer o2) {
				return o2-o1;
			}
			
		});
		for(int i:a) { System.out.print(i+" "); }
		
	}
}
3、lambda实现升序

Array.sort(T[] arr,(o1,o2)->o1-o2)升序

Array.sort(T[] arr,(o1,o2)->o2-o1)降序

//lamada
		Arrays.sort(a,(o1,o2)->o2-o1);
		for(int i:a) { System.out.print(i+" "); }System.out.println(" ");
		Arrays.sort(a,(o1,o2)->o1-o2);
        for(int i:a) { System.out.print(i+" "); }System.out.println(" ");

集合排序: 

Collections.sort(List<> arr)    所有元素从小到大排序

package day716;
import java.util.*;

public class 集合排序 {
	public static void main(String[] args) {
		List<Integer>list =new ArrayList<>();
		list.add(3);
		list.add(78);
		list.add(22);
		list.add(12);
		list.add(4);
		//法一
		Collections.sort(list);
		for(int i:list) {
			System.out.println(i);
		}
		//法二
		Collections.sort(list,(o1,o2)->o2-o1);
		for(int i:list) {
			System.out.print(i+" ");
		}
	}
}

【4】Set集合

Set集合可以用来去重:这里的Set集合与数学上的集合类似,不能存储重复的元素,且元素无序。

Set常用方法:

add()

size()

remove()

contains()

clear()

package day716;
import java.util.*;
public class Set集合去重 {
	public static void main(String[] args) {
		Set<Integer>set=new HashSet<>();
		boolean a=set.add(1);//add返回true or false
		boolean b=set.add(2);
		System.out.println(a+" "+b);
		System.out.println(set);
		System.out.println(set.size());//集合大小
		
		boolean c=set.remove(1);//删除1 这个元素
		System.out.println(set);
		
		boolean d=set.contains(1);//查看是否包含元素1
		System.out.println(d);
		
		set.clear();
		System.out.println(set);
	}
}
蓝桥云课题目练习
提示:

(1)输入数据

(2)定义HashSet<>()用来去重

(3)定义ArrayList<>()用来排序

【5】Map集合

Map 集合是一种能存储键值对的数据结构。它的主要功能是依据键(Key)来快速查找对应的值(Value)

明天继续..... 


网站公告

今日签到

点亮在社区的每一天
去签到