java的集合框架之一
java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定。不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木,当然美其名曰,论农民工搭积木的艺术修养。不难,但是东西很多,经验在里面是一个相当重要的东西。以上纯属每天扯淡,笑看即可,毕竟我目前就是个渣java程序员。
java的集合框架以collection接口当作基础,这个接口定义了基本框架,包括size、hashcode、iterator、add、addall、remove、retainall、toArray、clear等方法。也就是所有的实现了这个接口的类都必须要有这些方法。这个集合框架怎么组织的呢?collection接口定义大框架,abstractCollection作为实现了collec接口的抽象类,又实现了一些方法,但是还是没有size等方法的实现,这个叫做基础类,帮忙做一些工作,然后就是一些特定的实现类了。collection下面综合可以看又三种,set和list以及queue这三种,一般我们用list最多,set次之,queue用的最少,当然这也和我们的生活有很大关系。
list是一种有顺序允许重复的列表类数据结构,就是数据在里面是有顺序的,比如取list.get(i) 来获取一个对象,这里list不关心每个元素的值是否相同,另外list的一般的构造函数是List<String> list = new ArrayList<String>();这里用到了泛型,在编译的时候就限定了list要存取的元素。List也是一个接口,一般我们用实现类ArrayList来获取对象。list是动态增长的。另外list还可以转化为array,利用toArray方法,可以比较方便的转化为array。
Set不允许重复是一种没有顺序的集合数据结构。一般set我们见到的最多的实现类就是HashSet(客座率一般是0.75,初始容量是16,一旦超过就会翻倍),用hash来实现可以达到不错的效率。一般每个相同的对象拥有相同的hash值,这个是定义在Object方法中得,不同的对象也可能拥有相同的hash值,这个需要做一些特殊处理。set因为是用hash来实现的,所以不保证添加进set得次序,这时候可以考虑用LinkedHashSet类来处理,LinkedHashSet类当用add方法添加的时候,当打印的时候可以保证打印的顺序和当初添加的顺序是一样的,HashSet是不保证的。另外还有一个类就是TreeSet,树集,这个在上面有一些接口和抽象类做铺垫,有几个特别的方法,比如head,tail,ceil,floor等方法ceil是天花板的意思,大于等于,floor地板,于是就小于等于了。有了这些,就有点排序类的意思了,就是TreeSet类可以保证里面的元素是按照某种顺序排序。所以在TreeSet的构造函数中可以看到comparator类的参数,TreeSet也接受普通的set类,只不过两者的排序依据不太一样。说起排序原则,一般有两种,一种是自然排序,另外一种是实现了comparator接口的按照用户自己定义的某种排序方法。comparator接口,一般主要有一个compare方法需要去重写一下,然后给出返回值,参数就传含有comparator的接口对象,若返回1表示大于,返回0表示等于,返回-1表示小于。
Queue用的比较少,是一种先进先出的队列。(待续、待修改)
// 排序列表,主要是对comparator的使用
public static void sortList(List<String> list) {
Comparator<String> c = new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) { int lLen = lhs.length();
int rLen = rhs.length();
int minLen = lLen > rLen ? rLen : lLen;
for (int i = ; i < minLen; i++) {
char l = lhs.charAt(i);
char r = rhs.charAt(i);
if (l - r != ) {
return r - l;
}
}
if (lLen == rLen) {
return ;
} else {
return rLen - lLen;
}
}
};
Collections.sort(list, c);
}
java的集合框架之一的更多相关文章
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- java.util 集合框架集合
java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...
- Java基础——集合框架
Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...
- 浅谈Java的集合框架
浅谈Java的集合框架 一. 初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...
- java的集合框架set 和map的深入理解
Java的集合框架之Map的用法详解 Map有两种比较常用的实现:HashMap 和 TreeMap. HashMap: HashMap 也是无序的,也是按照哈希编码来排序的,允许使用null 值和n ...
- Java 高级-集合框架
参考资料 参考 HashMap 类似 C++ 中的 STL 标准模板库,Java 也在 java.util 包中封装了一套常用数据结构及其算法,称为集合框架.所有的集合框架都包含如下内容: 接口:代表 ...
- Java 之 集合框架(JCF)
1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...
- 十五、Java基础---------集合框架体系以及List
在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...
- Java的集合框架
01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...
随机推荐
- 在windows下编辑shell脚本注意点
编辑脚本是直接在windows下写的,并没有使用特定的编辑器或者其他工具,所以很有可能出现一些莫名其妙的异常,这些错误是我们眼睛看不到的,遇到这个情况,例如如下异常或者提示语法错误 Java代码 ...
- HDOJ/HDU Tempter of the Bone(深搜+奇偶性剪枝)
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- Kicad中批量添加过孔
布线按V即可插入过孔,但在铺铜,或大电流走线时,有时需要手动添加一些过孔. 但Kicad里面并没有这样的菜单,最后搜索到,要添加过孔时,需要先建立一个单过孔的封装. 然后插入这个封装到PCB.然后修改 ...
- 怎样安装Joomla 1.7网站系统
http://jingyan.baidu.com/article/8065f87fc3de112331249830.html 如果你想使用Joomla(地球上最好的内容管理系统之一)搭建一个网站, ...
- RHEL6彻底禁用ip6的方法
一.vi /etc/modprobe.d/disable-ipv6.conf(名字随便起)(RHEL6.0之后没有了/etc/modprobe.conf这个文件) 输入:install ipv6 / ...
- 《A First Course in Abstract Algebra with Applications》-chaper1-数论
由于笔者在别的专栏多次介绍过数论,这里在<抽象代数基础教程>的专栏下,对于chaper1数论这一章节介绍的方式不那么“入门”. 首先来介绍一个代数中常用也是非常重要的证明方法:数学归纳法. ...
- C语言中可变参数的用法
原文地址: http://blog.csdn.net/wooin/archive/2006/04/29/697106.aspx 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() ...
- JavaFX 3D部分介绍(3) Lights
声明: 本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...
- DevExpress GridControl 后台设置列
/// <summary> /// 初始化GridView /// </summary> /// <param name="gv">GridVi ...
- 国外NET 空间免费申请使用
最近研究微信公众帐号接口开发,需要使用到域名和空间,所以在度娘和谷哥的帮助下找到国外免费的空间, 刚刚注册完所以截图和大家分享下 注册地址:http://member.mywindowshosting ...