容器
2015-11-11 18:41
190 查看
1.容器的作用及分类
1)容器的作用:用来保存对象2)容器的分类:
a)Collection接口是一个独立元素的序列,这些元素都服从一条或多条规则。
b)Map是一组成对的“键值对”对象,允许使用键来查找值
2.List
1)List必须按照插入元素的顺序来保存元素,所以List是一个有序可以重复的容器。2)List下面又有AarrayList和LinkedList两个子类
3.ArrayList和LinkedList
1)ArrayList是继承自AbstractList的,LinkedList是继承自AbatractSequentialList的2)ArrayList的优点是擅长数据元素的随机访问,缺点是在List中插入和删除元素时比较慢,它类似于数组,但是又不同于数组。
3)LinkedList的优点是擅长在List中插入和删除元素,但是要访问一个数据元素,必须遍历整个链表才可以访问数据元素,效率比较低。
4)ArrayList底层是由数组支持的,LinkedList底层是由双向链表支持的,其中的每个对象包含数据的同时也指向链表中前一个与后一个元素的引用。
5)应用场景:如果在表中要查找一个元素,建议使用ArrayList;如果要删除或者插入一个元素在表中,建议使用LinkedList。
6)这两种List的容量可以动态变化,不像数组一样有固定大小的容量。
4.HashSet、TreeSet及LinkedHashSet
1)HashSet底层使用的散列函数。2)TreeSet底层使用的是红黑树的数据结构,元素必须实现Comparable接口。
3)HashSet可以用最快的速度来取得元素,TreeSet可以按照比较结果的升序来保存对象,LinkedHashSet按照被添加的顺序来保存对象。
4)Set是一个无序不可以重复的容器。
5)LinkedHashSet因为速度的原因也使用了散列,但是看起来它使用了链表来维护元素的插入顺序。
6)Set存入Set的每个元素都必须唯一的,因为set不保存重复的元素,加入set的元素必须定义equals()方法以确保对象的唯一性。set接口不保证维护元素的次序。
7)HashSet元素必须定义hashCode()方法
5.HashMap、TreeMap及LinkedHashMap
1)HashMap底层使用的数据结构是数组+链表的形式.2)HashMap也提供了最快的查找技术。
3)TreeMap按照比较结果的升序保存键。
4)LinkedHashMap是按照插入顺序保存键,同时还保留了HashMap查询的速度。
5)Map是基于散列表的实现,插入和查询“键值对”的开销是固定的,可以通过构造器设置容量和负载因子,以调整容器的性能。
6)WeakHashMap是弱键映射,允许释放映射所指向的对象,这是解决某类特殊问题而设计的。
7)ConcurrentHashMap:一种线程安全的Map,它不涉及同步加锁。
8)IdentityHashMap是使用==代替equals()对"键"进行比较的散列映射。
6.Java中的迭代器
Iterator只能单向移动,这个Iterator只能用来:1)使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个 元素。
2)使用next()获得序列中的下一个元素。
3)使用hasNext()来检查序列中是否还有下一个元素。
4)使用remove()将迭代器新返回的元素删除。
7.foreach(增强for循环)
1)语法格式:for(集合的数据类型 变量名:集合名)2)foreach语法主要用于数组,但是他可以应用于任何的Collection对象
8.HashMap的性能因子
1)容量:表中的桶位数2)初始容量:表在创建时所拥有的桶位数
3)尺寸:表示当前存储的项数
4)负载因子:尺寸/容量。空表的负载因子是0,而半满表的负载因子是0.5,一次类推。负载轻的表产生冲突的可能性小,因此对于插入和查找都是最理想的。HashMap和HashSet都具有允许你指定负载因子的构造器,表示当负载情况达到该负载因子的水平时,容器将自动增加容量,实现方式是使容量大致加倍,并重新将现有对象分布到新的桶位集中(此过程也称作再散列)。HashMap使用的默认负载因子是0.75。
9.小知识
1)将数组转化为List时使用Arrays.asList()。2)打印数组Arrays.toString()。
相关文章推荐
- 【转】IOS --- OC与Swift混编
- cocos2dx android 5.0系统崩溃问题
- 第12回 小曹Notification也不能会用吧
- servlet
- java--容器---ArrayList的删除
- 新建Linux虚拟机初始化网络等设置
- 030 - Substring with Concatenation of All Words
- Linux进程间通信(IPC)编程实践(四) 详解System V消息队列(2)(msgsnd & msgrcv)
- Android基于G-Sensor的计步算法
- Hadoop 上的HIVE,HBase和Pig Latin 数据流编程语言
- 029 - Divide Two Integers
- 我虽是一个编程的人,但是,我感觉自己能力还不行,简单介绍下自己吧
- 第11回 我猜小曹不会用Broadcast
- 关于测试人员的职业发展
- Codeforces Round #278 (Div. 1) A. Fight the Monster 暴力
- Thread系列——Thread.Sleep(0)
- 你不知道的JavaScript--Item32 DOM基础详解2
- Could not load the "*.png" image referenced from a nib in the bundle with identifier
- Linux GPIO驱动 - 驱动框架概述
- Ubuntu 14.04.3 LTS如何安装谷歌输入法