java集合(List、Set、Map等类详解)

本文详细介绍了Java集合框架,包括Collection接口、List接口(ArrayList和LinkedList)及其操作,Set接口(HashSet, TreeSet)与Comparable和Comparator的使用,以及Map接口(HashMap, TreeMap)的实现。同时讲解了Iterator遍历方式,以及Collections和Arrays工具类的应用。" 112610176,10540306,Eigen库的Initializer List便捷初始化,"['矩阵运算', 'C++', '数值计算', '开源库', 'Eigen']
摘要由CSDN通过智能技术生成

集合

一、Collection接口

集合(collection)有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体

集合被用于存储、获取、操纵和传输聚合的数据

集合框架(Collections Framework)是用来表现和操纵集合的一个统一的体系结构。所有的集合框架都包含以下内容:

  • 接口:是代表集合的抽象数据类型。
  • 实现:是集合接口的具体实现。本质上,它们是可重用的数据结构,是一些类。
  • 算法:是在实现了集合接口的对象上执行有用的计算的方法,如查找和排序。

请添加图片描述

二、Iterator接口

Collection接口提供了集合接口的通用操作

基本操作
int size() 返回集合元素的个数
boolean isEmpty() 判断集合是否包含集合元素
boolean contains(Object o) 判断集合中是否包含指定元素
boolean add(E element) 向集合中添加指定元素
boolean remove(Object o) 从集合中移除指定元素
Iterator iterator() 返回在集合元素上进行迭代的迭代器
批量操作
boolean containAll(Collection<?> c) 集合中是否包含指定的所有集合元素
boolean addAll(Collection<? extendsE> c ) 向集合中添加指定集合的所有元素
boolean removeAll(Collection<?> c) 从集合中移除指定集合的包含的元素
void clear() 移除集合中所有元素
boolean retainAll(Collection<?> c) 保留集合中指定的元素

Collection集合元素的遍历方式:

  1. for-each结构遍历
 for(Object o:c){
   
	System.out.print(o.toString());
 }

  1. 迭代器Iterator遍历
 public interface Iterator<E>{
   
           public boolean hasNext();
           public E next();
           public void remove();
 } 

三种遍历方式实现:

import java.util.ArrayList;
import java.util.Iterator;
public class Bianli {
   
    public static void main(String[] args) {
   
        ArrayList arr = new ArrayList();
        arr.add(10);
        arr.add(1);
        arr.add("123");

        System.out.println("----------遍历----------");
        //遍历
        for (int i = 0; i<arr.size() ; i++) {
   
            System.out.println(arr.get(i));
        }
        
        System.out.println("----------增强for遍历----------");
        //增强for循环
        for(Object o:arr){
   
            System.out.println(o);
        }
        
        System.out.println("----------迭代器遍历----------");
        //迭代器——Iterator
        Iterator iterator = arr.iterator();
        while(iterator.hasNext()){
   
            Object next = iterator.next();
            System.out.println(next);
        }
    }
}

运行结果:

请添加图片描述

三、List接口以及实现类

List接口是一个有序的集合,可以包含重复元素

除了从Collection继承来的操作外,List接口还提供了以下按序列进行操作的方法:

按序列操作的方法
E get(int index) 返回集合中指定位置的元素
int indexOf(Object o) 返回指定对象在集合中的索引位置
List subList(int from ,int to) 从集合中截取子集合
E remove(int index) 移除集合中指定位置的元素

Java平台提供了两个通用的List接口实现类

  • java.util.ArrayList
  • java.util.LinkedList

迭代器:Iterator是接口

作用:用来遍历集合的每一个集合对象都有一个对应的迭代器对象list.iterator()返回的是Iterator实现类的实例。

以ArrayList为例演示List接口的使用方法:

ArrayList类

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

public class Main {
   
    public static void main(String[] args) {
   
        
        //集合:用来存放相同性质的数据集合
        ArrayList list = new ArrayList();//创建一个ArrayList集合容器

        //ArrayList,元素有序[根据元素存入的顺序存放],内存空间连续。
        //元素可以重复也可以为null  【add(null)】
        //插入和删除的效率比较低,但是查询效率比较高。

//增
        list.add(10);
        list.add("azhe");
        list.add(new Date());
        list.add(1,1);
        System.out.println(list);//[10, 1, azhe, Tue Jul 27 09:34:47 CST 2021]

// 删
        list.remove(new Integer(10));//删除指定元素    转型
        list.remove("azhe");//删除指定元素
        System.out.println(list);
        list.remove(1);//删除指定下标的元素remove
        // list.clear();//清空

// 改
        list.set(1,"我");//set  将新的元素下标,替换新的元素set
        System.out.println(list);//[1, 我]

// 查
        //get()   获取容器种的指定下标元素
        Object o = list.get(2);  //返回值类型为Object
        System.out.println(o);//azhe

        boolean empty = list.isEmpty();//判断容器是否为空isEmpty()
        System.out.println(empty);//false

        boolean contains = list.contains(1);//查看是否包含指定元素contains
        System.out.println(contains);//true

        int i = list.indexOf(10);//获取指定元素的下标indexOf
        System.out.println(i);//0

        int size = list.size();//获取容器的长度size
        System.out.println(size);//4      存放了四个元素

        //toArray()   转为数组
        Object[] objects = list.toArray();
        System.out.println(Arrays.toString(objects));//[1, 我, 10, azhe, Tue Jul 27 10:06:25 CST 2021]
  
        
//批量操作
        ArrayList arr = new ArrayList();
        arr.add(10);
        arr.add(20);

        ArrayList arr1 = new ArrayList();
        arr1.add(30);
        arr1.add(40);

        arr.addAll(arr1);  //将两个集合中的元素添加到 当前集合中
        System.out.println(arr);//[10, 20, 30, 40]

        arr.removeAll(arr1);    //删除arr1中的元素
        System.out.println(arr);//[10, 20]

        arr.retainAll(arr1);  //删除其中没有的,保留相同的

        arr.contains(arr1);//两个集合中都有的

        ArrayList arr2 = new ArrayList(arr1);//将另一个集合中的元素放入新集合  
    }
}

LinkedList类:

import java.util.LinkedList;
public class LInk_List {
   
    public static void main(String[] args) {
   

        //LinkedList   内存空间不连续,元素有序,元素可以重复,元素可以为null。
        //双向链表 。   删除和插入的效率比较高,查询效率比较低。
        //方法和LinkList一样使用

        LinkedList  list = new LinkedList();
        list.add("asd");//添加
        list.remove(0);//删除
        int size = list.size();//长度
        list.set(0,1);//替换
        Object o = list.get(0);//查找
        int asd = list.indexOf("asd");//查找
        boolean asd1 = list.contains(&
Java 2集合框架图  集合接口:6个接口(短虚线表示),表示不同集合型,是集合框架的基础。  抽象:5个抽象(长虚线表示),对集合接口的部分实现。可扩展为自定义集合。  实现:8个实现(实线表示),对接口的具体实现。  在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。  · Collection 接口是一组允许重复的对象。  · Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。  · List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。  · Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。  · 容器中的元素型都为Object。从容器取得元素时,必须把它转换成原来的型。  Java 2简化集合框架图  集合接口  1.Collection 接口  用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。  (1) 单元素添加、删除操作:   boolean add(Object o):将对象添加给集合   boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o  (2) 查询操作:   int size() :返回当前集合中元素的数量   boolean isEmpty() :判断集合中是否有任何元素   boolean contains(Object o) :查找集合中是否含有对象o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值