当前位置: 首页 > news >正文

Set、Map、List三种集合的差别

1.集合类型主要有3种:set(集)、list(列表)和map(映射)。

2.关系图

在这里插入图片描述

3.set

——set接口是Collection接口的一个子接口,是无序的,set中不包含重复的元素。

也就是说set中不存在两个这样的元素a1.equals(a2)结果为true。又因为Set接口提供的数据结构是数学意义上的集合概念的抽象,因此他支持对象的添加和删除。

Set的接口继承Collection接口,而且不允许集合中存在重复项。

TreeSet:在集中以升序对对象排序的集的实现,这意味着从一个TreeSet对象获得第一个迭代器将按照升序来提供对象,TreeSet类使用了一个TreeMap。

当需要从一个Set集合中以有序的方式抽取元素时,TreeSet实现会有用处,为了能顺利进行,添加到TreeSet的元素必须是可排序的。

public class test{public static void main(String[] args) {Set<String> set = new HashSet<String>();set.add("xet");set.add("jpo");set.add("wo");set.add("jpo");System.out.println(set);Set<String> softset = new TreeSet<String>(set);System.out.println(softset);}
}

上面的结果是无序的,且没有重复,输出是按首字母的顺序来排序的。
在这里插入图片描述

4.List

List接口继承了Collection接口以定义一个允许重复项的有序集合。

List最重要的特点就是:它保证维护元素特定的顺序,List为Collection添加了很多方法,使得能够向List中间插入语移除元素。

LinkedList:对顺序访问进行了优化,向List中间插入与删除的开销并不大,随机访问则行对较慢,(使用ArrayList代替)还有下列方

List的一些API的使用:

public class Collection_test {public static void main(String[] args) {List l1 = new LinkedList();for(int i = 0;i<=5;i++){l1.add("a"+i);}System.out.println(l1);//向指定位置加一个字符串l1.add(0,"a100");System.out.println(l1);//替换index=6的位置的字符串l1.set(6, "a200");System.out.println(l1);//取index=2的位置的字符串System.out.println(l1.get(2)+"");//获得a3的index索引编号System.out.println(l1.indexOf("a3"));//移除index=1的值l1.remove(1);System.out.println(l1);}
}

List的常用算法举例

		/*** List常用算法举例*/List p1 = new LinkedList();List p2 = new LinkedList();for(int i = 0; i<=9;i++){p1.add("a"+i);}//打印p1[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]System.out.println(p1);//随机排列Collections.shuffle(p1);System.out.println(p1);//逆序Collections.reverse(p1);System.out.println(p1);//排序Collections.sort(p1);System.out.println(p1);//折半查找System.out.println(Collections.binarySearch(p1, "a5"));}

5.set 和List的对比

在这里插入图片描述

Set 和List的对比:

Set:检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化。List:和数组类似,List可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化。

Set 和 List的具体子类:

Set
 ----HashSet:以哈希表的形式存放元素,插入删除速度很快
List:
 ----ArrayList :动态数组----LinkedList:链表,队列,堆栈

6.Map

Map接口不是Collection接口的继承。而是从自己的用于维护键-值关联的接口层次结构入手。按定义,该接口描述了从不重复的键到值的映射。

我们可以把这个接口方法分成三组操作:改变、查询和提供可选视图。

改变操作允许您从映射中添加和除去键-值对。键和值都可以为null。但是,您不能把Map作为一个键或值添加给自身。

Object put(Object key, Object value)返回值是被替换的值。
Object remove(Object key)
void putAll(Map mapping)
void clear()

查询操作允许您检查映射内容:

Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()

提供可选视图方法允许您把键或值的组作为集合来处理。

public Set keySet()
public Collection values()
public Set entrySet()

因为映射中键的集合必须是唯一的,您用Set支持。因为映射中值的集合可能不唯一,您用Collection支持。最后一个方法返回一个实现Map.Entry接口的元素Set。

Map.Entry 接口

Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键-值对。

通过这个集合迭代,您可以获得每一条目的键或值并对值进行更改。但是,如果底层Map在Map.Entry接口的setValue()方法外部被修改,此条目集就会变得无效,并导致迭代器行为未定义。

HashMap 类和 TreeMap 类

“集合框架”提供两种常规的Map实现:HashMap和TreeMap。和所有的具体实现一样,使用哪种实现取决于您的特定需要。在Map中插入、删除和定位元素,HashMap是最好的选择。但如果您要按顺序遍历键,那么TreeMap会更好。根据集合大小,先把元素添加到HashMap,再把这种映射转换成一个用于有序键遍历的TreeMap可能更快。使用HashMap要求添加的键类明确定义了hashCode()实现。有了TreeMap实现,添加到映射的元素一定是可排序的。

为了优化HashMap空间的使用,您可以调优初始容量和负载因子。这个TreeMap没有调优选项,因为该树总处于平衡状态。

HashMap和TreeMap都实现Cloneable接口。

Hashtable类和Properties类是Map接口的历史实现。

HashTable: 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。

HashMap实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。

WeakHashMap: 实现这样一个映象:通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。这与HashMap形成对照,映象中的键维持键/对象对的生命周期,尽管使用映象的程序不再有对键的引用,并且因此不能检索对象。

TreeMap: 实现这样一个映象,对象是按键升序排列的。

http://www.xdnf.cn/news/857143.html

相关文章:

  • jQuery实现移动端手机选择日期日历插件
  • 【精品,面试之前必读】【转贴】安氏大俗商业学(2005-8-28)
  • 计算机网络——3A安全认证
  • 黑客入侵常见的一些手段!我敢说,你至少见过其中一种
  • STM32单片机自学教程
  • 大据数技术之高频面试题8.0.9
  • 处理中文乱码和中文部分乱码
  • 小程序电商“够货”完成A轮融资,BAI与龙湖资本联合领投...
  • VC编程——QQ连连看外挂
  • 不怕死就上这些网站
  • i.MX6ULL终结者进程基础 终止与回收
  • 2024年北京市安全员-B证证考试题库及北京市安全员-B证试题解析
  • asp毕业设计——基于asp+sqlserver的专利图像检索平台设计与实现(毕业论文+程序源码)——专利图像检索平台
  • 全网最全的Web自动化测试教程
  • NXP BLE SOC低功耗模式调试总结
  • JSON在线格式化
  • 支付通道及系统设计
  • 算法图解之递归
  • 电影资源格式说明
  • 运维工程师是干什么的?
  • SpringBoot 事件发布监听机制使用、分析、注意点 (一篇到位)
  • 数据挖掘:关联规则,异常检测,挖掘的标准流程,评估指标,误差,聚类,决策树
  • Cesium工具应用
  • skynet 简介
  • 转:三星安卓手机刷机包(ROM)刷机教程与ROOT教程总索引
  • oracle数据库中insert,从Oracle数据库中读取数据自动生成INSERT语句的方法
  • 快速使用Eolinker API接口管理工具
  • 【Java】通过调用阿里云短信服务给手机发短信
  • IvorySQL Operator | 一键部署IvorySQL集群,高效管理与个性化配置尽在掌控
  • css从入门到精通【超详细笔记】,技术详细介绍