博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Collection 之 Set、List和Map
阅读量:6936 次
发布时间:2019-06-27

本文共 1803 字,大约阅读时间需要 6 分钟。

Set

一个不包含重复元素的collection,确切的讲,set不包含满足e1.equals(e2)的元素对e1,e2,并且最多包含一个null元素;

此实现不是同步的,如果多个线程同时访问一个set,而其中至少一个线程修改了该set,那么它必须保持外部同步,通常是通过对自然封装该set的对象执行同步操作来完成,如果不存在这样的对象,则:Collections.synchronizedSet();  

1.HashSet

集合中元素无顺序,不重复;数据结构是哈希表;

保证元素唯一性的原理:判断元素的HashCode值是否相同,若相同,还会继续判断元素的equals方法,是否为true; 当一个对象被存储进HashSet集合中后,就不能修改这个对象的那些参与计算哈希值的字段了,如果修改后就会造成内在泄漏;

2.TreeSet

可以对Set集合中的元素进行排序:

(1)让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也成为元素的自然顺序;

(2)元素自身不具备比较性,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时就有了比较方式[定义比较器(Comparator<>接口),将它作为参数传给集合的构造函数]

以下两种方式为TreeSet需要实现的两种接口

实现Comparable接口

class Obj implements Comparable
{ public int compareTo(Obj o) { return this.name.compareTo(o.name); } }

实现Comparator接口

class ComptorObj implements Comparator
{ @Override public int compare(ComptorObj o1, ComptorObj o2) { return o1.name.compareTo(o2.name); } }

 

List 

一个有序的集合,允许元素的重复;该实现不是同步的,如果多个线程访问一个List实例,而其中至少一个线程从结构上修改了表(添加或删除元素),那么它需要保持外部同步;一般通过对自然封装该列表的对象进行同步操作来完成,如:Collections.synchronizedList()来包装列表;

1.ArrayList 

List接口的大小可变数组的实现,实现了所有可选列表操作,并且允许包括null在内的所有元素,

2.LinkedList

List接口的链接列表实现,允许元素为null,实现所有可选的列表操作,还为在列表的开头及结尾get、remove、insert提供实现;

 

Map

存储键值对,一对一对的存储;put(K,V)方法返回K值添加之前所对应的值,若已有值则进行覆盖;

取元素原理:将Map集合转成set集合,再通过set集合的迭代器进行值的取出。

1.Hashtable

底层是哈希表数据结构,不可以存入null键null值,线程同步;

2.HashMap

底层是哈希表数据结构,允许使用null键null值,线程不同步,效率高;

3.TreeMap

底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序;

 

数据迭代:

Set
setInstance = Map.keySet();Iterator
iterator = setInstance.iterator();value val = Map.get(key);

将Map中所有的键存下到Set集合,因为set具备迭代器,所以可以迭代方式取出所有的键,再根据Map集合的get方法,获取每一个键对应的值。

Set<Map.Entry<K,V>> entry = Map.entrySet();

将Map集合中的映射关系取出,存入到set集合中;通过set.iterator()方法得到集合中的数据;

该方法取出的元素类型为Map.Entry<T,V>;

 

转载地址:http://dsljl.baihongyu.com/

你可能感兴趣的文章
获取IOS应用的子目录
查看>>
EntityFramework 7 Linq Contains In 奇怪问题
查看>>
java.util.concurrent.Exchanger应用范例与原理浅析--转载
查看>>
apk 静默安装
查看>>
OnCreateContextMenuListener接口简介
查看>>
tp 批量转码
查看>>
国内阿里maven仓库镜像maven配置文件maven仓库速度快
查看>>
VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS
查看>>
DWZ使用笔记
查看>>
XP的定时关机命令?
查看>>
ORACLE SEQUENCE 介绍
查看>>
atitit.seo 发帖关键词以及链接的制作.doc
查看>>
GoogleProgressBar
查看>>
Sql Server之旅——第四站 你必须知道的非聚集索引扫描
查看>>
tcpdump抓包分析具体解释
查看>>
多线程设计模式总结(三)
查看>>
Silverlight 安装失败 提示 消息 ID 1603 的解决方法
查看>>
使用EMOJI表情
查看>>
mac 下基于firebreath 开发多浏览器支持的浏览器插件
查看>>
HDU Redraw Beautiful Drawings 推断最大流是否唯一解
查看>>