Java的集合框架——List,Set,Map

本文深入解析Java集合框架,包括链表、数学集合、映射(Map)等核心概念,阐述其内部工作原理及实用编程技巧,如LinkedList、Set、Map的使用方法和集合运算。

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

Java集合框架的作者Joshua Bloch认为通过ADT的样式声明,是一种非常值得推荐的编程时间技巧,是Java多态性应用。

Java语言中提供了很多有用的集合类型,利用这些类型可以很方便地进行排序,查找等操作,这些Java中内置的集合类统称为Java的集合框架。

LinkedList

       也就是我们常说的链表,声明的方法与ArrayList别无二致。他们都实现了List接口。

链表的缺点是在访问环节,由此引出了迭代器的概念,

迭代器在访问或删除每个元素时,保留了当前元素在列表中的位置。所以它的速度十分的快。

LinkedLIst的声明方法

LinkedList<E>name=new LinkedList<>(); //List<E> name=new LinkedList<>();

一些增删改查的操作它都可以实现。

迭代器的声明方法

Iterator<E>name=集合对象.iterator();

迭代器主要有三种方法 hasNext);next();remove();

name.next()才是我们可以认知到的第一个元素,所以迭代器的使用为

Iterator<E> name=集合对象.iterator();

while(name.hasNext())

{

  变量=name.next();

  System.out.println(变量)

}

注意:next的时候要细心。

数学集合

存储一系列没有重复元素的集合被称为数学集合(set)

声明方式 

Set<类型> name =new HashSet<>();

Set<类型> name =new TreeSet<>();

set不支持按图索骥,但是他查找元素的速度非常快,并且它没有重复的元素。有两个实现了set接口的集合类:TreeSet和HashSet。前一个利用的是二叉搜索树,后面的利用的是散列表。

set不支持利用索引来进行遍历元素,因此只好使用专用的迭代器,方法是一样的。

Iterator<String> it=对象.iterator();
while(it.hasNext)
{
    String word=it.next();
    System.out.println(word);
}

//另外一种迭代方法.
for(String word : 对象)
{
    System.out.println(word);
}

set的集合运算

1.并集  A.addAll(B); //包含在A或B所有元素的集合。

2.交集 A.retainAll(B);//同时包含在A和B中的元素。

3.差   A.removeAll(B);//包含在A中,但不包含在B中的元素。

4.超集或子集  A.containsAll(B) ;//如果A包含B的所有元素,那么就返回true;

(注意:这些方法直接在你提供的集合上进行修改,而不是创建返回新的元素。)

彩票实现

import java.util.*;
 
public class Main {
public  static  final  int NUMBERS=6;
    public static void main(String[] args) {
    Set<Integer> winnning=Winnticket();
    Set<Integer> tickets=getticket();
    Set<Integer> matches=new TreeSet<>(tickets);
    matches.retainAll(winnning);
    System.out.println("你的彩票"+tickets);
    System.out.println("中奖号码"+winnning);
    if(matches.size()>0)
    {
        System.out.println("你中了"+matches.size()+"位");
    }
    else {
        System.out.println("你没有获奖");
    }
 
    }
 
    public static  Set<Integer> Winnticket(){
 
        Set<Integer> win=new TreeSet<>();
        Random r=new Random();
        while (win.size()<NUMBERS)
        {
            int number =r.nextInt(10)+1;
            win.add(number);
        }
        return  win ;
    }
    public  static Set<Integer> getticket(){
        Set<Integer> ticket=new TreeSet<>();
        Scanner console=new Scanner(System.in);
        while (ticket.size()<NUMBERS)
        {
            ticket.add(console.nextInt());
        }
        return ticket;
    }
}

Map(映射)

类似于C++的映射,具体的原理依然是一对一的,一个key对应着一个value,但是key们的value值可能相同。不可以用C++的类似于数组的方法去查找。但是Java提供了许多的方法足以满足需要。Map没有对应的迭代器,但是依然可以输出。

声明方式:

Map<类型,类型> name=new HashMap<>();//推荐

Map<类型,类型> name=new TreeMap<>();
Map类型的常用方法
clear()删除map中所有的键值对
containsKey(key)顾名思义,返回值为true?false
containsValue(Value)同上,顾名思义
get(Key)返回与key相关联的value,不存在则返回NUll
isEmpty()顾名思义
KeySet()返回所有键的集合。(set)
put(key,value)添加,不多说
putAll(map)将给定的map所有键值放在当前map中
remove(key)删除一个key和与之相关联的value
size()顾名思义
values()返回所有值的集合(set)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值