前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础容器

基础容器

作者头像
Qwe7
发布2022-08-05 21:48:48
2600
发布2022-08-05 21:48:48
举报
文章被收录于专栏:网络收集网络收集

基本接口

java 提供了一些基础容器类,可以用特定的方式组织、存储和操作对象数据。这些集合框架分为两大分支:Collection 接口和 Map 接口。

所有容器都定义在 java.util 文件夹内,使用时需要进行导入。

Collection 接口

【集合】用特定的方式组织、存储和操作对象数据。有三个常用子接口 List 接口、Queue 接口、Set 接口。

Collection 接口以及所有子接口和子方法 都定义在 java.util 文件夹内,使用时需进行导入。

代码语言:javascript
复制
// 修改
collection.add(1);                // 添加元素
collection.remove(1);             // 删除元素
collection.clear();               // 清除所有元素

// 查询
collection.isEmpty();             // 判断集合是否为空
collection.size();                // 返回集合元素个数
collection.contains(1):           // 判断集合中是否含有元素

// 多集合操作
collection.addAll(c2);            // 并操作,添加其他集合中元素
collection.removeAll(c2);         // 减操作,删除和其他集合共有元素
collection.retainAll(c2);         // 交操作,只保留和其他集合共有元素 
collection.equals(c2);            // 判断是否和其他集合元素相同
collection.containsAll(c2);       // 判断是否包含其它集合所有元素  

// 创建迭代器
Iterator<Integer> iter = collection.iterator();Copy to clipboardErrorCopied

List 接口

【列表】元素有序,可以按索引操作。

代码语言:javascript
复制
// 修改
list.add("data1");              // 末尾添加元素
list.add(0, "data0");           // 插入元素
list.remove(0);                 // 按索引删除元素(int)
list.remove("data");            // 按内容删除对象元素(Object)
list.remove(new Integer(3));    // 按内容删除基础类型元素
list.clear();                   // 清除所有元素
list.set(0, "data2");           // 修改元素

// 查找
list.isEmpty();                 // 判定是否为空
list.size();                    // 查询列表元素个数
list.contains("data3");         // 判定是否含有元素
list.get(1);                    // 按索引查找元素
list.indexOf("data1");          // 查询索引号:如果有返回第一个,没有返回-1
list.lastIndexOf("data1");      // 查询索引号:如果有返回最后一个,没有返回-1

// 转化
list.toString();                // 转化为字符串
list.toArray();                 // 转化为 Object[] 数组
(String [])list.toArray();      // 转化为对象数组,但不能是基础类型Copy to clipboardErrorCopied

Queue 接口

【队列】元素有序,在队列尾插入/在队列首移除。常用 Deque 子接口。

代码语言:javascript
复制
//修改
queue.offer(10);                // 队列尾插入元素,队列满返回 false
queue.peek();                   // 获取队列首元素,队列空返回 null
queue.poll();                   // 获取并移除队列首元素,队列空返回 null
queue.clear();                  // 清空元素

/* offer/peek/poll 方法可以用 add/get/remove 方法代替,但队列空/满时会抛出异常。 */

// 查找
queue.isEmpty();                 // 判定是否为空
queue.size();                    // 查询列表元素个数
queue.contains("data3");         // 判定是否含有元素Copy to clipboardErrorCopied
Deque 接口

【双端队列】元素可以在两端进出。

代码语言:javascript
复制
deque.offerFirst(e);            // 队列首添加元素 
deque.pollFirst();              // 队列首移除元素
deque.peekFirst();              // 获取队列首元素

deque.offerLast(e);                // 队列尾添加元素
deque.pollLast();               // 队列尾移除元素
deque.peekLast();               // 获取队列尾元素 

/* offer/peek/poll 方法可以用 add/get/remove 方法代替,但队列空/满时会抛出异常。 */Copy to clipboardErrorCopied

Set 接口

【集】数据不可重复。

代码语言:javascript
复制
// 修改
set.add("data");              // 添加元素
set.remove("data");           // 删除元素
set.clear();                  // 清除所有元素

// 查询
set.get(1);                   // 按序号查找元素(仅限于有序的 set 接口)
set.isEmpty();                // 判断是否为空
set.size();                   // 返回元素个数
set.contains("data");         // 判定是否含有元素Copy to clipboardErrorCopied

HashSet 类无序,因此不支持 get 方法:获取对象必须要通过 Iterator 来遍历。

Collections 类

Collections 类是针对集合类的一个帮助类,他提供一系列静态方法实现各种集合操作。

  1. 排序操作(主要针对List接口)
代码语言:javascript
复制
Collections.swap(list, 1, 2);          // 元素交换顺序
Collections.shuffle(list);             // 元素随机排序
Collections.reverse(list);             // 元素颠倒排序
Collections.sort(list);                // 元素按大小排序,可以自定义比较顺序
Collections.rotate(list, 2);           // 元素右移指定长度Copy to clipboardErrorCopied
  1. 查找和替换
代码语言:javascript
复制
Collections.binarySearch(list, "data");              // 二分查找元素索引,只适用于有序集合
Collections.max(list);                               // 返回最大元素,可以自定义比较顺序
Collections.min(list);                               // 返回最小元素,可以自定义比较顺序
Collections.frequency(list, "data");                 // 返回对象出现次数

Collections.fill(list, "data");                      // 使用指定元素填充
Collections.replaceAll(list, "old", "new");          // 使用指定元素替换Copy to clipboardErrorCopied
  1. 上锁(主要针对List接口)

调用 Collections 类中的 synchronizedList 方法,可以将 List 接口转换成线程安全的容器使用。

List 接口中的方法都会被添加 synchronized 锁(效率不高)。但是 iterator 方法没有加锁,如果要遍历还需要在外层加锁。

代码语言:javascript
复制
List list = Collections.synchronizedList(new ArrayList());

synchronized (list) {
    Iterator i = list.iterator(); 
    while (i.hasNext())
        foo(i.next());
}Copy to clipboardErrorCopied

Map 接口

【图】组织存储 key-value 的数据元素组合:内部实际存储的是 Map.Entry<K, V> 静态内部类。

Entry 类可以通过 getKey、getValue、setKey、setValue 方法调整数据。

Map 接口方法
代码语言:javascript
复制
map.put("key_1",1);               // 添加键值对,已有 key 则覆盖 value
map.putIfAbsent("key_2",2);       // 添加键值对,已有 key 则不操作

map.remove("key_1");              // 删除键值对(按值)           
map.remove("key_2",2);            // 删除键值对(按键值)

map.get("key_1");                 // 获取值, key 不存在返回null
map.getOrDefault("key_2",-1);     // 获取值, key 不存在返回默认值

map.containsKey("key_1");       // 判断 key 是否存在  
map.containsValue(1);             // 判断 value 是否存在      

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本接口
    • Collection 接口
      • List 接口
        • Queue 接口
          • Deque 接口
        • Set 接口
          • Collections 类
            • Map 接口
              • Map 接口方法
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com