---恢复内容开始---
众所周知在我们使用Java中的类的存储的时候经常会使用一些容器,链表的概念,本文将彻底帮您弄清链表的各种概念和模型!!!!注
意理解哦~~~ 大致框架如下:
---->ArrayList 类似数组的形式进行存储,因此它的随机访问速度快 可以重复)
|
|
|
----->List--------------------------->|
| |
| |----->LinkedList 适合于在链表中间需要频繁进行插入和删除操作。
|
|
|
Collection------------> |
(元素间无序, |
可以重复组各 自独立的元素|
即其内的每个位 置仅持有 | | ---->HashSet 能快速定位,但是放到HashSet中的对象需要实现hashCode方法
一个 元素) | |
| |
| |
----->Set----------------------->|
(实现了不重复,有点象集合的 |
概念,无序) |
|
|
---->TreeSet 实现了相应的排序
Map:与Collection并列 群成对的key-value对象,即所持有的是key-value pairs。Map中不能有重复的key,它拥有自己的内部排列机制
。但可以实现多个键值对应一个数值的情况。
Iterator:Iterator又称迭带器,能对Collection进行顺序遍历。
Vector:Vector是List接口的一个具体实现,支持列表元素的顺序访问,大小可以随着元素的增加二而增加,同时是线程安全的。也正为
要求线程安全,所以访问的性能比较差。自Java1.2以后,已经不推荐使用。Java1.2推荐使用ArrayList和LinkedList。他们都不是线程安
全的,所以性能较好。其中ArrayList随机访问速度快,而LinkedList在表中间 插入的速度快。
对于以上两种类型,说白了就是Collection类的容器,实现其具体的遍历而实现的。
Collection,Set,List的区别: Collection各元素之间没有指定的顺序,允许有重复的元素和多个null元素对象. Set各元素之间没有指定的顺序,不允许有重复的元素,最多允许有一个null元素对象. List各元素之间有指定的顺序,允许有重复的元素和多个null元素对象.
List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。 你可以将任何东西放到一个List容器中,并在需要时从中取出。 ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合
于在链表中间需要频繁进行插入和删除操作。 在具体应用时可以根据需要*选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对
List进行双向遍历的方法。
Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set
容器中。它的常用具体实现有HashSet和TreeSet类。 HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet
则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和
Comparator。 一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,
只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器
进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。
Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来
说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象
所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质
的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性
的要求。 你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个
键所对应的值对象)。Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,
TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子
Map。键和值的关联很简单,用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此
key对象所对应的值对象。
1. 容器的分类 1.1. Collection:一组各自独立的元素,即其内的每个位置仅持有一个元素。 1) List:以元素安插的次序来放置元素,不会重新排列。 2) Set:不接爱重复元素,它会使用自己内部的一个排列机制 1.2. Map:一群成对的key-value对象,即所持有的是key-value pairs。 Map中不能有重复的key,它拥有自己的内部排列机制。 2. 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类型。 List、Map、Set List 通过下标来存取 和值来存取 Map 键值对应来存取 set 存取元素是无序的
---恢复内容结束---
关于Collection'的更多相关文章
-
Java基础Collection集合
1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:
-
Collection集合
一些关于集合内部算法可以查阅这篇文章<容器类总结>. (Abstract+) Collection 子类:List,Queue,Set 增: add(E):boolean addAll(C ...
-
iOS之解决崩溃Collection <;__NSArrayM: 0xb550c30>; was mutated while being enumerated.
崩溃提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CAL ...
-
[Java Collection]List分组之简单应用.
前言 今天有一个新需求, 是对一个List进行分组, 于是便百度到一些可用的代码以及我们项目使用的一些tools, 在这里总结下方便以后查阅. 一: 需求 现在我们一个数据库表t_series_val ...
-
Java Collection开发技巧
Java Collection(集合) 集合中的一些技巧: 通过Collections类的静态方法,可以对集合进行一些操作 1 java.util.List<Integer> number ...
-
浅谈Collection集合
俗话说:一个东西,一件事都离不开三句话:"是什么,为什么,怎么办" 集合是什么: 集合简单的说一个数组集合的高级体现,用来存储数据或对象的容器: 集合为什么存在: 集合只是体现了对 ...
-
Backbone中的model和collection在做save或者create操作时, 如何选择用POST还是PUT方法 ?
Model和Collection和后台的WEB server进行数据同步非常方便, 都只需要在实行里面添加一url就可以了,backbone会在model进行save或者collection进行cre ...
-
Collection和Collections的区别?
Collection 是接口(Interface),是集合类的上层接口. Collections是类(Class),集合操作的工具类,服务于Collection框架.它是一个算法类,提供一系列静态方法 ...
-
Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译
本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...
-
MyBatis中collection (一对一,一对多)
MyBatis学习:http://www.mybatis.org/mybatis-3/zh/index.html 大对象InsuranceDetailsVO: com.quicksure.mobile ...
随机推荐
-
Qt自适应大小显示图片,添加菜单
由于后面的图像处理需要UI,OpenCV自带也不怎么会,MFC实在懒得学的.听同学说Qt不错,就用Qt做UI了. 本文主要介绍三个内容:在Qt Creator中使用OpenCV2.Qt中自适应显示图片 ...
-
linux c++编译问题和虚拟机网络通信
1.gcc main.cpp -lstdc++ -o test5 2. service network stop service NetworkManager restart
-
解决libcurl7.50.3在windows XP SP3 VC++ 6.0下编译报错 unresolved external symbol __imp__IdnToAscii@20 unresolved external symbol __imp__IdnToUnicode@20
错误重现: --------------------Configuration: curl - Win32 LIB Debug DLL Windows SSPI DLL WinIDN--------- ...
-
干货分享:让你分分钟学会 javascript 闭包
闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述 ...
-
解决Visual Studio 2010新建工程时出现『1>;LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误
VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误. 解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...
-
DirectSound---音效使用
DirectSound以DMO(DirectX Nedua Objects)的方式提供了对原始音频数据的处理,开发者能够通过VC6.0里的Audio Effect DMO Wizard来开发自定义的D ...
-
C#本质论笔记
第一章 C#概述 1.1 Helo,World 学习一种新语言最好的办法就是动手写程序. C#编译器创建的.exe程序是一个程序集(Assembly),我们也可以创建能由另一个较大的程序 ...
-
vs2017 git凭证问题
安装完tfs2017(自带git)后,连接git代码服务器,报authorication错误.这是vs2017的bug.尝试了许多种方案后,最简单的干脆手动添加如下3个凭证.一定要核对好地址中的. ...
-
jQuery双击编辑td数据
html <td class="remark" style="width: 200px;"> {$vo.remark} </td> js ...
-
EasyUI 布局 - 动态添加标签页(Tabs)
首先导入js <link rel="stylesheet" href="../js/easyui/themes/default/easyui.css"&g ...