Java中Collection、List、Set、Map之间的关系总结
作者:劲火星空 发布时间:2022-11-18 21:41:42
初学java,单个的接触有点迷糊,所以总结下他们的关系
一、关系
Collection
--List:以特定顺序存储
--ArrayList、LinkList、Vector
--Set:不能包含重复的元素
--HashSet、TreeSet
Map
--HashMap、HashTable、TreeMap
二、分别讲解
Collection:Collection是一个父接口,List和Set是继承自他的子接口,Collection是最基本的集合接口,Java SDK中不提供直接继承自Collection的类,而是提供继承自他子接口的类,如List何Set。所用的Collection类都支持一个Iterator()
方法来遍历。
List:List接口是有序的,会精确的将元素插入到指定的位置,和下面的Set接口不同,List接口允许有相同元素
ArrayList:实现可变大小的数组,允许所有的元素,不是同步的,也就是没有同步方法
LinkList:允许null元素,通常在首部或者尾部操作,所以常被使用做堆栈(stack)、队列(queue)和双向队列(deque)
Vector:类似于ArrayList,但Vector是同步的,Stack继承自Vector
Set:是一种不包含重复元素的Collection接口
HashSet:不能有重复元素,底层是使用HashMap来实现的
Map:此接口实现的Key到Value的映射,一个Map中不能包含相同的Key,每个Key只能映射一个Value
HashTable:实现了一个Key-Value的哈希表,每一个非null元素都可作为Key或者Value,HashTable是同步的
HashMap:和HashTable的不同之处是,非同步的,且允许null元素的存在
三、Array和Arrays Collection和Collections
Array:是所以随机访问一串对象中,最有效率的一种,但是元素类型必须相同,且容量固定无法改变。
Arrays:此静态类专门操作array,提供搜索、排序、复制等静态方法
Collection:Java.util下的一个接口,是各种集合结构的父接口
Collections:Java.util下的一个专用静态类,他包含各种集合操作的静态方法,包括对集合的搜索、排序、线程安全等操作。
四、总结
涉及到堆栈、队列等操作,使用List接口,快速插入和删除应使用LinkList,随机访问元素使用ArrayList
单线程使用非同步类,多线程使用同步类
注意对HashTable的操作,作为Key的对象要覆写equals和hashCode方法
在各种Map中HashMap用于快速查找
最长使用的是ArrayList、HashSet、HashMap、Array
下面是一个找出元素字符串数组中最长字符串的例子
package Collection;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MasString {
public static void main(String args []){
String str[] = new String[]{"zhans", "lis", "wangwt", "quliu"};
List<String> list = Arrays.asList(str);
String max = Collections.max(list, new strSort()); // Collections静态函数的使用
System.out.println("max: "+max);
}
}
class strSort implements Comparator<String>{
<span style="white-space:pre"> </span>// 一个比较器重新定义
public int compare(String s1, String s2){
if(s1.length() < s2.length()){
return -1;
}
if(s1.length() < s2.length()){
return s1.compareTo(s2);
}
else return 1;
}
}
来源:https://blog.csdn.net/jinhuoxingkong/article/details/51225641
猜你喜欢
- HashMap的keySet()方法比较简单,作用是获取HashMap中的key的集合。虽然这个方法十分简单,似乎没有什么可供分析的,但真正
- 本篇实例内容是关于C#读取CAD文件的,直接看代码//在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上
- C#消息提示框messagebox的详解及使用消息对话框是用messagebox对象的show方法显示的。MessageBox对象是命名空间
- 本文实例为大家分享了Unity快速生成常用文件夹的具体代码,供大家参考,具体内容如下前言每次打开新工程创建文件夹都很麻烦,写了一个小工具代码
- 一、SpringMVC使用1.工程创建创建maven工程。添加java、resources目录。引入Spring-webmvc 依赖。<
- 在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应。解决的方法就是新开一个线程,把耗时的
- 该接口实现了序列化,声明为 public interface Key extends SerializableKey 是所有密钥的顶层接口。
- 前言数据驱动测试是相同的测试脚本使用不同的测试数据执行,测试数据和测试行为完全分离。数据驱动是做自动化测试中很重要的一部分,数据源的方案也是
- 上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMa
- 定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。设计初衷:
- Zipkin是一种分布式跟踪系统。它有助于收集解决微服务架构中延迟问题所需的时序数据。它管理这些数据的收集和查找。Zipkin的设计基于&n
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- Activity中Toast的使用Toast.makeText(this,"ADD",Toast.LENGTH_SHOR
- System.getProperty(user.dir)定位问题前言随着学习java web 的深入学习,为了巩固自己的学习成果,练习了一个
- java8 Stream大数据量List分批处理//按每3个一组分割private static final Integer MAX_NUM
- 在Java里面,可以用复制语句”A=B”给基本类型的数
- 最近想关闭一个包的日志打印,经过一番研究实际上就一句话的事,一直没成功是因为name写错了。<logger name="pa
- SSM Mapper查询出返回数据查不到个别字段原因开启了驼峰命名法则,Bean里的字段不识别_注释掉或者把实体类里的字段_去掉换位大写SS
- 说明:当程序中出现频繁变化的数据时,如果采用认为的方式进行修改并且编译打包则会导致代码的耦合性较高,不便于维护!所以能否为属性动
- 在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。使用流程【1】准备工作:在项目的工具包下导入HttpClient