两个list取交集_Java基础面试题-说说你知道的几个Java集合类:list、set、queue、map...
关系
这张图简单揭示了Set、List与Map之间的相对关系。
需要说明下的是,图中的实现并不指这么简单的实现,这个稍后会说到。
Collection接口
Collection是Java中最基本的集合接口。它描述了一组有关集合操作的方法。
- int Size(); //集合大小
- boolean isEmpty(); //是否为空
- boolean contains(Object o); //是否包含某个对象
- Iterator<E> iterator(); //返回一个迭代对象,用来遍历集合中的元素
- Object[] toArray(); //将集合中的元素以数组形式然后返回
- <T> T[] toArray(T[] a); //上一个方法的泛型形式
- boolean add(E e); //将对象e添加进集合,添加成功则返回true
- boolean remove(Object o); //移除某个元素
- boolean containsAll(Collection<?> c); //传入一个集合c,如果c中的元素都存在,则返回true
- boolean addAll(Collection<? extends E> c); //将集合c中的元素全部添加进本集合
- boolean removeAll(Collection<?> c); //本集合减去c集合中的元素
- boolean retainAll(Collection<?> c); //取本集合和c集合的交集
- void clear(); //清空集合
- boolean equals(Object o); //判断相等
- int hashCode(); //获取集合当前的hash值
Set接口
Set接口直接继承自Collection接口,并且方法接口上也一模一样。Set对添加的元素有一些要求,其不允许出现重复的元素,并且元素之间没有次序。这相当于一个不允许重复的离散的集合。因此,添加进Set的元素类型需要定义equals方法。若是使用自定义的类,则应该重写equals方法来确保实现自己需要的功能。
Set接口主要实现了两个类:HashSet,TreeSet。
HashSet是按照哈希来存取元素的,因此速度较快。HashSet继承自抽象类AbstractSet,然后实现了Set、Cloneable、Serializable接口。
TreeSet也是继承自AbstractSet,不过不同的是其实现的是NavigableSet接口。而NavigableSet继承自SortedSet。SortedSet是一个有序的集合。其添加的元素必须实现了Comparable接口,因为其在添加一个元素的时候需要进行排序。NavigableSet则提供了更多的有关元素次序的方法,比如:
- E lower(E e); //找出小于e的元素
- E floor(E e); //找出小于等于e的元素
- E ceiling(E e); //找出大于等于e的元素
- E higher(E e); //找出大于e的元素
- E pollFirst(); //弹出第一个(最小)元素,如果集合为空则返回null
- E pollLast(); //弹出最后一个(最大)元素,如果集合为空则返回null
LinkedHashSet也是Set的一个实现。和HashSet类似,只不过内部用链表来维护,按照元素插入次序来保存。
List接口
List接口也是继承自Collection。与Set不同的是,List可以存储重复的元素。主要有两种实现:ArrayList和LinkedList。
ArrayList没有什么好说的,就像传统的数组一样,有着很快的随机存取速度,但是插入删除的速度就很慢。
LinkedList则与ArrayList恰恰相反,因为用链表来保存数据,所以插入删除元素的速度很快,但是访问数据的速度就不如ArrayList了。
Map接口
Map(映射)是一个存储键值对的容器接口。每一个元素包含一个key对象和value对象,且元素不允许重复。
Map接口的实现有以下几个:
HashMap是最常用的一个实现。HashMap使用hash映射来存取数据,这个速度是相当快,是O(1)的速度。其容量capacity,和负载因子load factor可以在一开始设定。当元素个数达到capacity*load factor的时候,就会进行扩容。
LinkedHashMap和HashMap类似,只不过内部用链表来维护次序。因此遍历时候的顺序是其插入顺序。
TreeMap是基于红黑树的Map,插入的数据被有次序保存,并且有很高的效率。因此在遍历输出的时候可以得到排序的数据。但是这要求插入的数据实现了comparable接口。
总结
- Collection、Set、List和Map都是接口,不能被实例化。
- Set和List都继承自Collection,而Map则和Collection没什么关系。
- Set和List的区别在于Set不能重复,而List可以重复。
- Map和Set与List的区别在于,Map是存取键值对,而另外两个则是保存一个元素。
文章最后喜欢的小伙伴可以关注下我的或者关注我的专栏,以后给大家带来更多精彩的技术和面试知识点分享
程序员学习之路zhuanlan.zhihu.com
两个list取交集_Java基础面试题-说说你知道的几个Java集合类:list、set、queue、map...相关推荐
- Python-两个列表取交集、并集、差集(编写了一个两个文件取交集的小工具)
最近突然有个需求(取两个文件数据的交集),数据量非常大(2000多万行的数据),最开始的思路是先取一个文件所有的数据,保存成一个列表,然后判断是否在另一个文件中,花了十几分钟写出来后,一运行,差点崩溃 ...
- jdk8两个List取交集、差集、并集(不去重)、并集(去重)
jdk8两个List取交集.差集.并集(不去重).并集(去重) /*** 交集* @param list1* @param list2* @return*/private static List< ...
- Python中两个list取交集、并集、差集以及为字符串str添加、插入特定字符的操作总结
Python中两个list取交集.并集.差集以及为字符串str添加.插入特定字符的操作总结 Python中两个list取交集.并集.差集 为字符串str添加.插入特定字符的操作总结 Python中两个 ...
- 【Java】对两个Set取交集,差集,并集
1.取交集(取两个集合中都存在的元素) HashSet<String> setA = new HashSet<>(); HashSet<String> setB = ...
- linux两个文件取交集、并集、差集
如何得到两个文件的交集.并集和差集? 交集:两个文件中都出现的行 并集:两个文件中的所有行加起来,去掉重复 差集:在一个文件中存在,而在另一个文件中不存在. 比如以下两个文件: a.txt aaa b ...
- js 两个列表取交集
js没有直接的方式来获取两个列表的交集,需要自己写一个函数,如下: function jiaoji(arr_1,arr_2){//先对arr_1进行一次深拷贝,防止对原两个列表造成影响let temp ...
- python两个list取交集_使用 Python 获取两个列表的交集、并集、差集的常用方法 | Jin''''s Blog...
在数据处理中经常需要使用 Python 来获取两个列表的交集,并集和差集.在 Python 中实现的方法有很多,我平时只使用一两种我所熟悉的,但效率不一定最高,也不一定最优美,所以这次想把常用的方法都 ...
- python对两个list取交集、并集、和异或
第一种方法:使用python基本数据结构set集合. 优点:集合运算长度可以不一致,运算效率高 缺点:两个进行运算的集合中不能够含有重复的元素,如果含有的话,转成set集合后,会自动去掉重复元素 a= ...
- Linux中uniq去重以及对两个文件取交集,并集,差集
uniq 前言 很多时候我们需要对数据去重,不管是少量数据还是大量数据,写代码进行去重终究没有使用系统功能直接操作文件方便,所以本文就介绍了一些关于uniq的使用方法 uniq单独使用 uniq配合s ...
最新文章
- 记录opencv编译过程
- Jenkins配置Java项目1(Java+Maven+Tomcat+SVN/Git)
- WPF - 资源收集
- 利用js刷新页面方法
- SAP Spartacus里,点击checkbox右边的span文本,不会触发checkbox勾选的原因
- $router和$route的区别
- Shared library can't open object
- 用python自制一个简单的答题程序
- 接口测试apipost
- cron表达式每隔1小时一次_cron 每隔1小时50分钟_cron每小时执行一次
- 手机浏览器 打开 APP,APP 嵌套在了浏览器里,网页跳转app问题
- DataGear 制作自适应任意屏幕尺寸的数据可视化看板
- 袋鼠云平台代码规范化编译部署的提效性改进实践
- 计算机的r进制,进制转换(十进制转R进制)
- NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized“
- springboot+jsp网上水果生鲜商城销售系统
- Ubuntu根目录结构说明
- android hid触摸屏,Android USB触摸屏HID描述符问题
- Python实现北邮人论坛模拟登录
- 步进电机调速,S曲线调速算法很香
热门文章
- usaco-2.1-frac1-pass
- 程序编译过程与软件启动过程
- Excel VBA入门的基础语句
- FFMPEG开源音视频项目学习汇总
- Python爬取网易云热歌榜所有音乐及其热评
- Ubuntu18.04报错:Aborted (core dumped) (classes.jar.toc.tmp ) ninja: build stopped: subcommand failed解决
- Ubuntu和Mac使用gdbserver远程调试android源码
- Android java获取行号和函数名
- 如何构建NTP时间服务器
- springboot项目打成可依赖jar包_用IDEA把SpringBoot项目打成jar发布项目