【Java语法基础】8.常用的容器

8.常用的容器

List

以下用T代表类型。

  • 接口java.util.List<T>

  • 实现

    • java.util.ArrayList<T>:变长数组
    • java.util.LinkedList<T>:链表
  • 函数

    • add():添加一个元素
    • clear():清空,这时长度为0
    • size():返回链表的长度
    • isEmpty():返回是否为空
    • get(int i):返回第i个元素的值
    • set(i, val):将第i个元素设置为val

例子如下:

java 复制代码
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<Integer>(10);
        for(int i = 0; i < 10; i ++)
                arr.add(i);

		//按照array来创建LinkedList
        List<Integer> link = new LinkedList<Integer>(arr);
        System.out.println(link.set(5, 1));
        
        //支持增强版的for循环
        for(Integer i : link)
            System.out.println(i);
    }
}

只有栈是类,不是接口,其他容器都是接口。

  • java.util.Stack<T>

  • 函数

    • push(item):压入元素
    • pop():弹出栈顶元素并返回
    • peek():返回栈顶元素
    • size():返回长度
    • empty():返回栈是否为空
    • clear():清空

示例:

java 复制代码
import java.util.Stack;
public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();

        for(int i = 0; i < 10; i ++)
                stack.push(i);
        System.out.println(stack.pop());
        System.out.println(stack.peek());
        System.out.println(stack.size());
    }
}

队列

  • 接口java.util.Queue<T>

  • 实现

    • java.util.LinkedList<T>
    • java.util.PriorityQueue<T>

    默认是小根堆,若要实现大根堆:

    java 复制代码
    Queue<Integer> q = new PriorityQueue<Integer>(Collections.reverseOrder());
  • 函数

    • add(i):队尾添加元素
    • remove():删除对头元素并返回
    • isEmpty():返回是否为空
    • size():返回长度
    • peek():返回队头
    • clear():清空

示例:

java 复制代码
import java.util.Queue;
import java.util.PriorityQueue;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> q = new PriorityQueue<Integer>(Collections.reverseOrder());

        for(int i = 0; i < 10; i ++)
            q.add(i * i * i - i * i + i);
        
        while(q.size() > 0)
            System.out.println(q.remove());
    }
}

Set

Set集合中的元素是无须的且不可重复。

  • 接口java.util.Set<K>

  • 实现

    • java.util.HashSet<K>:哈希表
    • java.util.TreeSet<K>:平衡树
  • 函数

    • add(item):添加元素
    • contains(item):是否包含某个元素
    • remove(item):删除元素,返回是否删除成功
    • size():返回元素数
    • isEmpty():返回集合是否为空
    • clear():清空集合

    除此之外,java.util.TreeSet<K>多出来的函数:

    • ceiling(key):返回大于等于 key的最小的元素,不存在则返回null
    • floor(key):返回小于等于 key的最大的元素,不存在则返回null

Map

与C++一样,java里的Map也是维持key->value的键值对映射的数据结构。

  • 接口java.util.Map<K, V>

  • 实现

    • java.util.HashMap<K, V>:哈希表
    • java.util.TreeMap<K, V>:平衡树
  • 函数

    • put(key, value):插入键值对
    • get(key):返回关键字对应的值
    • containsKey(key):是否包含该关键字
    • remove(key):移除关键字
    • size():返回元素数
    • isEmpty():是否为空
    • clear():清空
    • entrySet():获取map中所有对象的集合,示例如下:

    注意Set的元素类型。

    java 复制代码
    Map<Integer, String> mp = new HashMap<Integer, String>();
    mp.put(1, "one");
    Set<Map.Entry<Integer, String>> ms = mp.entrySet();
    • Map.Entry<K, V>:map中的对象类型
      • getKey():获取关键字
      • getValue():获得值
  • java.util.TreeMap<K, V>多出的函数:

    • ceilingEntry(key):返回大于等于key的最小元素
    • floorEntry(key):返回小于等于key的最大元素

示例如下:

java 复制代码
    TreeMap<Integer, String> mp = new TreeMap<Integer, String>();
    mp.put(1, "one");
    mp.put(2, "two");
    mp.put(3, "three");
    mp.put(4, "four");

    Map.Entry<Integer, String> a = mp.ceilingEntry(3);
    System.out.println(a.getKey());  //输出:3
    System.out.println(a.getValue()); //输出:three
相关推荐
冷雨夜中漫步2 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴3 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再3 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
JH30733 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
m0_736919104 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手4 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_5 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934735 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy5 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
invicinble5 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat