集合类浅谈(1)
来源:互联网 发布:素描画图软件 编辑:程序博客网 时间:2024/06/05 12:25
------------| Collection 单例集合的根接口
----------------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
-------------------| ArrayList ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可) 底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
----------------| Set 如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet 底层是使用了哈希表来支持的,特点: 存取速度快.
HashSet 的实现原理:
往HashSet 添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 ,
然后通过元素 的哈希值经过移位等运算,就可以算出该元素在哈希表中 的存储位置。
情况1: 如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。
情况2: 如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次
,如果equals返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals方法返回的是false,那么该元素运行 添 加。
------------------| TreeSet 如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。
TreeSet 要注意的事项:
1. 往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储。
2. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,把元素
的比较规则定义在compareTo(T o)方法上。
3. 如果比较元素的时候,compareTo方法返回 的是0,那么该元素就被视为重复元素,不允许添加.(注意:TreeSet与HashCode、equals方法是没有任何关系。)
4. 往TreeSet添加元素的时候, 如果元素本身没有具备自然顺序 的特性,而元素所属的类也没有实现Comparable接口,那么必须要在创建TreeSet的时候传入一个
比较器。
5. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而元素所属的类已经实现了Comparable接口, 在创建TreeSet对象的时候也传入了比较器
那么是以比较器的比较规则优先使用。
如何自定义定义比较器: 自定义一个类实现Comparator接口即可,把元素与元素之间的比较规则定义在compare方法内即可。
自定义比较器的格式 :
class 类名 implements Comparator{
}
推荐使用:使用比较器(Comparator)
- 集合类浅谈(1)
- 浅谈java集合类
- 浅谈Set集合类
- 浅谈集合类
- 浅谈java中的集合类
- 集合类浅谈(2)
- 浅谈集合
- 浅谈Java集合类(一)【List】
- 浅谈java集合类(二)【Map】
- C#之集合浅谈
- 浅谈JAVA集合框架
- 浅谈数据集合
- 浅谈JAVA集合框架
- 浅谈JAVA集合框架
- 浅谈JAVA集合框架
- 浅谈Java集合框架
- 浅谈JAVA集合框架
- 浅谈集合框架
- HDU 4348To the moon 主席树 + 区间更新
- ajax跨页面提交表单
- nginx1.10.1学习笔记
- 基本分页、请求分页储存管理方式
- xargs的原理剖析及用法详解
- 集合类浅谈(1)
- 简易mvc框架配置类和日志类的简单实现
- js继承的实现
- 1095. Cars on Campus
- swift判断app第一次启动
- Angular解决输入框由禁用状态转可用状态自动获取焦点失效问题
- (10) java源码分析 ---- HashMap源码分析 及其 实现原理分析
- 7天入门php-文件打开/读取/写/常用判断
- python -- 配置mysql