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 ...
随机推荐
- (medium)LeetCode 227.Basic Calculator II
Implement a basic calculator to evaluate a simple expression string. The expression string contains ...
- wap资费页面
移动网关 CMWAP 返回vnd.wap.wml 用CMWAP接入点发一个http的请求时,移动的10.0.0.172这个代理网关会回一个确认页面,中国特色.处理的办法是检测到Content-type ...
- SQL查询数据库是否存在
在实际工作中会遇到通过SQL查询数据库是否存在的情况,下面一些语句可以提供一些帮助,本文的语句是在SQL08R2中测试的 1,查询当前数据库服务器所有数据库 select * From master ...
- jdk1.6官方下载地址
jdk1.6: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javas ...
- ipv6 测试
# ifconfig wlp0s29f7u6: .... ... inet6 fe80::a00:20ff:fe9d:5c55 prefixlen 64 scopeid 0x20<link> ...
- html5—— 应用程序缓存
使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本. 什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这 ...
- android softinput 相关
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.Layo ...
- Indian Scientists Design Device to Collect Solar Energy 印度科学家设计太阳能收集设备
Indian scientists have designed a new device they hope will solve one of the biggest problems with ...
- 【LeetCode】15. 3Sum 三个数和为0
题目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find al ...
- 【LeetCode】5. Longest Palindromic Substring 最大回文子串
题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...