Java容器学习(2)

举报
幼儿园老大* 发表于 2024/09/19 11:14:51 2024/09/19
【摘要】 Deque 接口【双端队列】元素可以在两端进出。deque.offerFirst(e); // 队列首添加元素 deque.pollFirst(); // 队列首移除元素deque.peekFirst(); // 获取队列首元素deque.offerLast(e); // 队列尾添加元素d...

Deque 接口

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



deque.offerFirst(e);            // 队列首添加元素 
deque.pollFirst();              // 队列首移除元素
deque.peekFirst();              // 获取队列首元素

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

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

Set 接口

【集】数据不可重复。


// 修改
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接口)

Collections.swap(list, 1, 2);          // 元素交换顺序
Collections.shuffle(list);             // 元素随机排序
Collections.reverse(list);             // 元素颠倒排序
Collections.sort(list);                // 元素按大小排序,可以自定义比较顺序
Collections.rotate(list, 2);           // 元素右移指定长度Copy to clipboardErrorCopied
  1. 查找和替换

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 方法没有加锁,如果要遍历还需要在外层加锁。


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 接口方法


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 是否存在      
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。