3)Java容器
这里的 Collection、List、Set和Map都是接口(Interface)。 List lst = new ArrayList(); 这是我们平常经常使用的创建一个新的List的语句,在这里, List是接口,ArrayList才是具体的类。

Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Map<--TreeMap
Map<--HashMap
Collection/Map
|
接口
|
成员重复性
|
元素存放顺序( Ordered/Sorted )
|
元素中被调用的方法
|
基于那中数据结构来实现的
|
HashSet
|
Set
|
Unique elements
|
No order
|
equals()
hashCode()
|
Hash 表
|
LinkedHashSet
|
Set
|
Unique elements
|
Insertion order
|
equals()
hashCode()
|
Hash 表和双向链表
|
TreeSet
|
SortedSet
|
Unique elements
|
Sorted
|
equals()
compareTo()
|
平衡树(Balanced tree )
|
ArrayList
|
List
|
Allowed
|
Insertion order
|
equals()
|
数组
|
LinkedList
|
List
|
Allowed
|
Insertion order
|
equals()
|
链表
|
Vector
|
List
|
Allowed
|
Insertion order
|
equals()
|
数组
|
HashMap
|
Map
|
Unique keys
|
No order
|
equals()
hashCode()
|
Hash 表
|
LinkedHashMap
|
Map
|
Unique keys
|
Key insertion order/Access order of entries
|
equals()
hashCode()
|
Hash 表和双向链表
|
Hashtable
|
Map
|
Unique keys
|
No order
|
equals()
hashCode()
|
Hash 表
|
TreeMap
|
SortedMap
|
Unique keys
|
Sorted in key order
|
equals()
compareTo()
|
平衡树(Balanced tree )
|
(0)collection:(interfere)
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
- boolean add(Object element)
- boolean remove(Object element)
- int size()
- boolean isEmpty()
- boolean contains(Object element)
- Iterator iterator()
- boolean containsAll(Collection collection)//是否包含某集合的所有元素
- boolean addAll(Collection collection)//并集
- void clear()//清空整个集合
- void removeAll(Collection collection)//从一个集合中去除了另一个集合的所有元素。集合的减法
- void retainAll(Collection collection) //集合的交集
转换为Object数组的方法:
- Object[] toArray()
- Object[] toArray(Object[] a)//a 应该是集合中所有存放的对象的类的父类
(1)List(interface)
(1.1)Vector:
基于数组(Array)的List,封装了数组所不具备的一些功能方便我们使用,所以它难以避免数组的限制,同时性能也不可能超越数组。另外很重要的一点就是Vector是线程同步的(sychronized)。
(1.2)ArrayList:
同Vector一样是一个基于数组上的List,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一点,但是当运行到多线程环境中时,需要自己在管理线程的同步问题。
(1.3)LinkedList:
LinkedList不同于前面两种List,它不是基于数组的,所以不受数组性能的限制。
LinkedList 添加了一些处理列表两端元素的方法,
addFirst()、addLast() 、
这些方法可以当作堆栈,队列使用
List总结:
所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ]
所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]
所有的List中可以有null元素,例如[ tom,null,1 ]
基于Array的List(Vector,ArrayList)适合查询,而LinkedList 适合添加,删除操作
(2.1) HashSet:HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。value值不用。
(2.2) LinkedHashSet
(2.3)TreeSet:不同于HashSet的根本就是TreeSet是有序
Set总结:
HashSet实现的基础是Map,TreeSet的实现基础是平衡二叉树
Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象
该程序的一次执行结果为:
第 0 次随机数产生为: 96
第 1 次随机数产生为: 64
第 2 次随机数产生为: 14
第 3 次随机数产生为: 95
第 4 次随机数产生为: 57
未排序前HashSet :[64, 96, 95, 57, 14]
未排序前LinkedHashSet :[96, 64, 14, 95, 57]
排序后 TreeSet :[14, 57, 64, 95, 96]
从这个例子中,我们可以知道 HashSet的元素存放顺序和我们添加进去时候的顺序没有任何关系,而 LinkedHashSet 则保持元素的添加顺序。 TreeSet则是对我们的 Set中的元素进行排序存放。
需要注意的是,TreeMap中是根据键(key)进行排序的,而如果我们要使用TreeMap来进行正常的排序的话,key中存放的对象必须实现Comparable。
Collection/Map
|
接口
|
成员重复性
|
元素存放顺序( Ordered/Sorted )
|
元素中被调用的方法
|
基于那中数据结构来实现的
|
HashSet
|
Set
|
Unique elements
|
No order
|
equals()
hashCode()
|
Hash 表
|
LinkedHashSet
|
Set
|
Unique elements
|
Insertion order
|
equals()
hashCode()
|
Hash 表和双向链表
|
TreeSet
|
SortedSet
|
Unique elements
|
Sorted
|
equals()
compareTo()
|
平衡树(Balanced tree )
|
ArrayList
|
List
|
Allowed
|
Insertion order
|
equals()
|
数组
|
LinkedList
|
List
|
Allowed
|
Insertion order
|
equals()
|
链表
|
Vector
|
List
|
Allowed
|
Insertion order
|
equals()
|
数组
|
HashMap
|
Map
|
Unique keys
|
No order
|
equals()
hashCode()
|
Hash 表
|
LinkedHashMap
|
Map
|
Unique keys
|
Key insertion order/Access order of entries
|
equals()
hashCode()
|
Hash 表和双向链表
|
Hashtable
|
Map
|
Unique keys
|
No order
|
equals()
hashCode()
|
Hash 表
|
TreeMap
|
SortedMap
|
Unique keys
|
Sorted in key order
|
equals()
compareTo()
|
平衡树(Balanced tree )
|
如何选择?
1 、容器类和 Array的区别、择取
* 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息 copy 一份至数列某位置。
* 一旦将对象置入容器内,便损失了该对象的型别信息。
2 * 在各种 Lists 中,最好的做法是以 ArrayList作为缺省选择。当插入、删除频繁时,使用 LinkedList() ;
Vector总是比 ArrayList 慢,所以要尽量避免使用。
* 在各种 Sets 中,HashSet 通常优于TreeSet (插入、查找)。只有当需要产生一个经过排序的序列,才用 TreeSet 。
TreeSet存在的唯一理由:能够维护其内元素的排序状态。
* 在各种 Maps 中
HashMap用于快速查找。
* 当元素个数固定,用 Array ,因为Array 效率是最高的。
结论:最常用的是ArrayList,HashSet ,HashMap,Array 。而且,我们也会发现一个规律,用 TreeXXX都是排序的。
1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get)
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。
5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
6、Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。
使用values()抽取value序列,将map中的所有values生成一个Collection。
为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。
3)Java容器的更多相关文章
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- 【Java心得总结六】Java容器中——Collection
在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...
- 【Java心得总结五】Java容器上——容器初探
在数学中我们有集合的概念,所谓的一个集合,就是将数个对象归类而分成为一个或数个形态各异的大小整体. 一般来讲,集合是具有某种特性的事物的整体,或是一些确认对象的汇集.构成集合的事物或对象称作元素或是成 ...
- Java 容器(list, set, map)
java容器类库的简化图: (虚线框表示接口, 实线框表示普通的类, 空心箭头表示特定的类实现了接口, 实心箭头表示某个类可以生成箭头所指的类对象) 继承Collection的主要有Set 和 Lis ...
- Java - 容器详解
一.ArrayList 长度可变数组,类似于c++ STL中的vector. 元素以线性方式连续存储,内部允许存放重复元素. 允许对元素进行随机的快速访问,但是向ArrayList中插入和删除元素的速 ...
- Java 容器:Collection 初探之 List
1 ///: JavaBasic//com.cnblogs.pattywgm.day1//CollectionTest.java 2 3 package com.cnblogs.pattywgm.da ...
- java容器---集合总结
思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...
- JAVA容器
JAVA容器 一.容器体系结构 java.util 二.迭代器Iterator<E> 迭代器是一种设计模式,可以遍历并选择序列中的对象,而开发人员并不需要了解该序列的底层结构.迭代器通常被 ...
- Java 容器相关知识全面总结
Java实用类库提供了一套相当完整的容器来帮助我们解决很多具体问题.因为我本身是一名Android开发者,包括我在内很多安卓开发,最拿手的就是ListView(RecycleView)+BaseAda ...
随机推荐
- poj 1328 Radar Installation(nyoj 287 Radar):贪心
点击打开链接 Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43490 Accep ...
- [POJ 1155] TELE (树形dp)
题目链接:http://poj.org/problem?id=1155 题目大意:电视台要广播电视节目,要经过中转机构,到观众.从电视台到中转商到观众是一个树形结构,经过一条边需要支付成本.现在给你每 ...
- Eclipse不能进入断点
如题:Eclipse不能进入断点,可能是项目没有build,如果是maven项目,clean,在maven install就可以了
- oracle rac 日志体系结构!
告警日志集群节点集群件告警日志:$GRID_HOME/log/<hostname>/alert<hostname>.log数据库实例的告警日志:$DIAG_DESTINATIO ...
- phpmyadmin #2003 无法登录 MySQL服务器的解决方法
本文章向大家介绍phpmyadmin #2003 无法登录 MySQL服务器的解决方法,需要的码农可以参考一下. 通过phpmyadmin连接mysql数据库时提示:"2003 无法登录 M ...
- mysq 因断电而导致的错误
问题来源: 昨天断电,而我没有保存,导致出现以下问题: 2015-10-12 10:48:10 7300 [Note] Plugin 'FEDERATED' is disabled. 2015-10- ...
- Linux-Apache+Mysql+PHP+PHPWind(重点Apache+PHP集成环境)
整理Apache+Mysql+PHP+PHPWind(Apache+PHP集成环境) 一.情况简述: 1.虚拟机VM上面CentOS 2.全部yum安装(yum安装与源码安装的安装路径不同) 二.操作 ...
- Android Studio实用快捷键汇总
以下是平时在Windwos系统上用Android Studio进行开发时常用到的一些快捷键,虽然不多,但是感觉都还蛮实用的,因此记录下来,如果什么时候不小心忘记了可以拿来翻一翻,That would ...
- 使用Kinect2.0获取点云以在GLUT中显示
这篇文章用来记录Kinect2.0如何生成点云. 以下示例源自Kinect提供的example修改完成,其名称会在小标题下方注解. 首先,要获取点云需要获取图像的深度数据和颜色数据.最后再将深度数据与 ...
- 缓存之Memcached
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...