JAVA中的数据结构——集合类(序):枚举器、拷贝、集合类的排序
- 枚举器与数据操作
1)枚举器为我们提供了访问集合的方法,而且解决了访问对象的“数据类型不确定”的难题。这是面向对象“多态”思想的应用。其实是通过抽象不同集合对象的共同代码,将相同的功能代码封装到了枚举器的这个接口里,就可以用一套代码来遍历不同类型的集合。
2)每个集合类(Vector或Hashtable等)都有一个iterator方法,各集合对象可以通过这个方法把遍历本类的控制权交给Iterator接口。
3)Iterator接口提供了boolean hasNext()方法判断是否到了集合的最后一个元素;提供了E next()方法获取下一个元素。
4)通过类似于Itetator it=v.iterator();的语句将遍历v的控制权交给it;通过 while(it.hasNext()){ println(it.next().toString()); }访问v的元素。
5)定义统一的访问各集合类的方法:static void readData(Iterator it){ while(it.hasNext()){ println(it.next().toString()); } },之后就可以用readData(v.iterator());、readData(l.iterator());、readData(ht.iterator());来访问vector、list、hashtable集合类了。。。
- 深浅拷贝
1)浅拷贝:实质是对数据的引用,而不是开新的空间去存储。
ShareData sd1=new ShareData(1); ShareData sd2=sd1;//对sd2的操作会影响sd1的内容,因为他们本来就指向同一个内存区域。
2)浅拷贝:通过Object对象的clone方法复制自身,但只能拷贝对象,不能拷贝对象里面的元素。
ArrayList l1=new ArrayList(); List l2=(List)l1.clone();//对l2的操作会影响l1的内容。
3)深拷贝:通过实现Clonalbe接口,并,覆写clone方法,自定义对象克隆的特性。
ArrayList l1=new ArrayList(); List l2=(List)l1.clone(); for{ l2.set( i, ( (item)l1.get(i) ).clone() ); }//对l2的操作【不会】影响l1的内容。
- JAVA集合类中的排序
排序要解决两个问题:i)按什么关系排序;ii)用什么方法排序。Java里为我们提供了sort排序方法,我们要做的是:指定排序规则(怎么判断对象的大小关系)。
1)第一种方法:实现Comparable接口,并,覆写compareTo(Object o)方法,然后调用Collections类的sort(List list)方法对list对象按照compareTo()方法定义的规则进行排序。
public int compareTo(Object o){ CompObj co=(CompObj)o;//类型转换 if(x!=co.x){return x-co.x;}else{return y-co.y;} }
ArrayList l=new ArrayList(); Collections.sort(l);
2)第二种方法:在比较器Comparator中定义排序规则,然后调用Collections类的sort(List list,Comparator c)方法对list对象按照比较器Comparator定义的规则进行排序。
class ObjComparator implements Comparator{ public int compare(Object o1,Object o2){//类型转化; //比较规则;} }
ArrayList l=new ArrayList(); Collections.sort(l,new ObjComparator());
JAVA中的数据结构——集合类(序):枚举器、拷贝、集合类的排序的更多相关文章
- 动图+源码,演示Java中常用数据结构执行过程及原理
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...
- 动图+源码,演示 Java 中常用数据结构执行过程及原理
阅读本文大概需要 3.7 分钟. 作者:大道方圆 cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想 ...
- java中的数据结构(集合|容器)
对java中的数据结构做一个小小的个人总结,虽然还没有到研究透彻jdk源码的地步.首先.java中为何需要集合的出现?什么需求导致.我想对于面向对象来说,对象适用于描述任何事物,所以为了方便对于对象的 ...
- [转]详细介绍java中的数据结构
详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...
- 详细介绍java中的数据结构
详细介绍java中的数据结构 http://developer.51cto.com/art/201107/273003.htm 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个 ...
- Java中的数据结构及排序算法
(明天补充) 主要是3种接口:List Set Map List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模 ...
- Java中的数据结构有哪些?HashMap的工作原理是什么?
Java中常用数据结构 常用的数据结构有哈希表,线性表,链表,java.util包中有三个重要的接口:List,Set,Map常用来实现基本的数据结构 HashMap的工作原理 HashMap基于ha ...
- Java中的数据结构-HashMap
Java数据结构-HashMap 目录 Java数据结构-HashMap 1. HashMap 1.1 HashMap介绍 1.1.1 HashMap介绍 1.1.2 HashMap继承图 1.2 H ...
- 18、Java中的 数据结构
Java2中引入了新的数据结构 集合框架 Collection,下一节再谈论(非常重要,面试也常问). 1.枚举 (Enumeration) 1.1 Enumeration 源码: public in ...
随机推荐
- JS代码片段:一个日期离现在多久了
var dateDiff = function(hisTime,nowTime){ if(!arguments.length) return ''; var arg = arguments, now ...
- Android Studio设备背景色
从eclipse转到Android Studio. Android Studio的一些设置 1.设置字体大小:Settings->Editor->Colors&Fonts-> ...
- gsp序列模式挖掘
数据挖掘进阶之序列模式挖掘GSP算法 绪 继续数据挖掘方面算法的讲解,前面讲解了数据挖掘中关联规则算法FP-Growth的实现.此篇博文主要讲解基于有趣性度量标准的GSP序列模式挖掘算法.有关论文后期 ...
- hadoop2的automatic HA+Federation+Yarn配置的教程
前言 hadoop是分布式系统,运行在linux之上,配置起来相对复杂.对于hadoop1,很多同学就因为不能搭建正确的运行环境,导致学习兴趣锐减.不过,我有免费的学习视频下载,请点击这里. hado ...
- UVa 10375 (唯一分解定理) Choose and divide
题意: 求组合数C(p, q) / C(r, s)结果保留5为小数. 分析: 先用筛法求出10000以内的质数,然后计算每个素数对应的指数,最后再根据指数计算答案. #include <cstd ...
- 最简单的视音频播放示例7:SDL2播放RGB/YUV
本文记录SDL播放视频的技术.在这里使用的版本是SDL2.实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API.在Windows平台下,SDL封装了Direct3D这类的API ...
- <摘录>PS和TS流的区别
在 MPEG-2系统中,信息复合/分离的过程称为系统复接/分接,由视频,音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送 流(TS:TransportStream).据传输 ...
- Banner 广告设计技巧及经验(转自UI中国)
经常听到banner这个词,但是banner是什么意思呢?引用百度知道的解释:banner可以作为网站页面的横幅广告,也可以作为游行活动时用的旗帜,还可以是报纸杂志上的大标题.Banner主要体现中心 ...
- Jabber/XMPP协议与架构
一.概述 由Jeremie Miller于1998年开始这个项目.Jabber是一个开放源码形式组织产生的网络实时通信协议,第一个公开版本于2000年5月发行.Jabber已经由IETF XMPP协议 ...
- 将Temporary文件夹里的Logo文件转移到Logo文件夹
/// <summary> /// 将Temporary文件夹里的Logo文件转移到Logo文件夹 /// </summary> /// <param name=&quo ...