




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Collections Framework集合框架是一个统一的架构,用来表示和操作集合.集合框架主要是由接口,抽象类和实现类构成.接口:蓝色;实现类:红色Collection|_Set(HashSet)| |_SortedSet(TreeSet)|_List(LinkedList,ArrayList)Collection:集合层次中的根接口,JDK没有提供这个接口的实现类。Set:不能包含重复的元素,子接口SortedSet是一个按照升序排列的元素的Set。List:可以包含重复的元素,是一个有序的集合,提供了按索引访问的方式,有次序,位置不改变。Collection接口常用的方法:booleanadd(E o) 确保此 collection 包含指定的元素(可选操作)。booleancontains(Object o) 如果此 collection 包含指定的元素,则返回 true。booleanremove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。int size() 返回此 collection 中的元素数。ObjecttoArray() 返回包含此 collection 中所有元素的数组。Iteratoriterator() 返回在此 collection 的元素上进行迭代的迭代器。List接口特有方法:Eget(int index) 返回列表中指定位置的元素。SortedSet接口特有方法:Efirst() 返回此有序集合中当前第一个(最小的)元素。Elast() 返回此有序集合中最后一个(最大的)元素。集合框架中的实现类.ArrayList:本质:我们可以将其看作是能够自动增长容量的数组,实际是采用对象数组实现的。自动增长容量就是当数组不够的时候,再定义更大的数组,然后将数组元素拷贝到新的数组.例子:import java.util.*;class ArrayListTestpublic static void main(String args) ArrayList a1=new ArrayList(); a1.add(winsun); a1.add(weixin); a1.add(mybole); for(int i=0;ia1.size();i+) System.out.println(a1.get(i); System.out.println(a1); 结果:winsunweixinmybolewinsun, weixin, mybole利用ArrayList的toArray()返回一个对象的数组也可以利用Arrays.asList()方法返回一个列表返回固定尺寸的列表,当返回以后就不能修改列表的大小了,可以修改列表中元素的值,但不能增加容量,可以用set()方法对值进行修改:Object set(int index,Object element)用element替换指定的index的对象Arrays.asList()和Collection.toArray()是作为数组和集合类的一个桥如果想从集合类中获得一个数组可以使用toArray()方法;如果想从数组中获得一个列表可以使用asList()方法 :import java.util.*;class Point int x, y;Point(int x, int y) this.x = x; this.y = y;public String toString() return x= + x + ,y= + y;public class ArrayListToArrayTest public static void main(String args) ArrayList a1 = new ArrayList(); a1.add(new Point(3, 3); a1.add(new Point(4, 4); a1.add(new Point(5, 5); for (int i = 0; i a1.size(); i+) System.out.println(a1.get(i); System.out.println(a1); Object objs = a1.toArray(); / 利用ArrayList的toArray()返回一个对象的数组. for (int i = 0; i HashCode-对象内存地址TreeSet:TreeSet是依靠TreeMap来实现的.TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中元素要实现Comparable接口.我们可以在构造TreeSet对象时,传递实现了Comparator接口的比较器对象.java.util包当中TreeSet类import java.util.*;public class TreeSetTest /如果自定义类对象要加入TreeSet要实现Comparable接口public static void main(String args) TreeSet ts=new TreeSet(new Student.StudentComparator();/* ts.add(winsun); ts.add(weixin); ts.add(mybole); */ ts.add(new Student(2,lisi); ts.add(new Student(1,wangwu); ts.add(new Student(3,zhangsan); ts.add(new Student(3,mybole); Iterator it=ts.iterator(); while(it.hasNext() System.out.println(it.next(); class Student implements Comparableint num;String name;static class StudentComparator implements Comparator public int compare(Object o1,Object o2) Student s1=(Student)o1; Student s2=(Student)o2; int result=s1.nums2.num ? 1 : (s1.num=s2.num ? 0 : -1); if(result=0) /String类实现了compareTo()方法. result=pareTo(); return result; public static void printElements(Collection c) Iterator it=c.iterator(); while(it.hasNext() System.out.println(it.next(); Student(int num,String name) =name; this.num=num;public int HashCode() return num*name.hashCode();public boolean equals(Object o) Student s=(Student)o; return num=s.num & name.equals();public int compareTo(Object o) Student s=(Student)o; return nums.num?1:(num=s.num?0:-1);public String toString() return num+:+name;*HashSet是基于Hash算法实现的,其性能通常优于TreeSet.通常都应该使用HashSet,在需要排序的功能时,才使用TreeSet.*迭代器:Collection提供了一个iterator()方法,可以返回一个迭代器,迭代器是指向两个元素之间的指针。凡是继承自Collection的接口或间接的实现类都有这个方法.其中有3个方法1.hasNext()2.next()3.remove()hasNext()判断是否有更多的元素,如果有返回trueremove()方法remove()方法需要删除上一个返回的元素,需要先调用next()方法后在用remove(),返回的列表有时不一定真正实现remove()方法,根据需要决定是否实现.如:ArrayList al1=new ArrayList();Iterator it=al.iterator();it.next();while(it.hasNext()System.out.println(it.next();通用方式访问集合中的元素另外定义打印函数public static void printElements(Collection c)Iterator it=c.iterator();while(it.hasNext() System.out.println(it.next();Map(HashMap)|_SortedMap(TreeMap)Map:存储的是key-value对,不能包含重复的key,可以有重复的value。子接口SortedMap是一个按升序排列key的Map。在系统区windows目录下有win.ini有键和对应的值asf=MPEGVideo注册表存储的也是这种类型.就是用Map接口所提供的方法来存储.SortedMap是一个按照升序排列key的Map.Map接口实现类:HashMap:对key进行散列.keySet().values().entrySet().HashMap是实现了Map接口的Hash表.实现了所有hashmap操作,允许空值和空键.HashSet底层就是hashmap的实现.map接口没有add()方法.要放置元素通过put()方法.Object put(Object key,Object value)获取元素的时候Object get(Object key)通过键获取值Hash表,通过键计算出相对应的存储位置的值,并输出.常用的方法Set keySet()返回一个键的视图类型是Set.Collection values()返回一个值的视图类型是Collection.Set entrySet()返回一个键值对视图类型是Set.返回的Set集合当中每一个对象都是一个Map.Entry对象.Map.Entry是一个静态的接口.接口中提供了常用方法Object getKey()Object getValue()*import java.util.*;public class HashMapTestpublic static void printElements(Collection c) Iterator it=c.iterator(); while(it.hasNext() System.out.println(it.next(); public static void main(String args) HashMap hm=new HashMap(); hm.put(1, zhang3); hm.put(2, li4); hm.put(3, wang5); System.out.println(hm.get(1); System.out.println(hm.get(2); System.out.println(hm.get(3); Set keys=hm.keySet(); System.out.println(-keys-); printElements(keys); Collection values=hm.values(); System.out.println(-values-); printElements(values); Set entrySets =hm.entrySet(); System.out.println(-entrySets-); printElements(entrySets); Iterator it=entrySets.iterator(); while(it.hasNext() Map.Entry me=(Map.Entry)it.next(); System.out.println(me.getKey()+ = +me.getValue(); *TreeMap是实现了sorted Map接口的类TreeMap按照key进行排序.类似HashMap用法*HashMap和TreeMap比较和Set类似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的时候,才使用TreeMap.另外有用的类Collections类不同于Collection类Collections.sort()主要是对列表排序.1.自然排寻natural ordering2.实现比较器Comparator接口取最大元素Collections.max().取最小元素Collections.min().在已经排序的List中搜索指定的元素.Collections.binarySearch().static void sort(List list)方法是按升序对指定列表排序.自然排序法.列表中元素必须都实现了comparable接口.与Arrays.sort()是一样的.comparable接口在java.lang包当中.实现comparable接口就要实现compareTo()方法.compareTo()大于返回正数,等于返回0,小于返回负数.class Student implements Comparableint num;String name;Student(int num,String name) this.num=num; =name;public int compareTo(Object o) Student s=(Student)o; return nums.num?1:(num=s.num?0:-1);public String toString() return num+:+name;public static void printElements(Collection c)Iterator it=c.iterator();while(it.hasNext() System.out.println(it.next();public static void main(String args)Student s1=new Student(2,zhangsan);Student s2=new Student(1,lisi);Student s3=new Student(3,wangwu);ArrayList a1=new ArryList();a1.add(s1);a2.add(s2);a3.add(s3);Collections.sort(a1);printElements(a1);排序的时候可以传递一个比较器.Comparator接口.java.util包当中.有两个方法int compare(Object o1,Object o2)两个对象进行比较当对象1大于对象2的时候返回1,当对象1等于对象2的时候返回一个0,当对象1小于对象2的时候返回一个负数.和boolean equals(Object obj)方法.实现一个比较器.比较器总是和一个特定的类相关.为某一个类指定一个比较器.利用内部类实现比较器接口.*内部类声明为静态方法就不需要产生外部类对象.class Student implements Comparableint num;String name;Student(int num,String name) this.num=num; =name;public int compareTo(Object o) Student s=(Student)o; return nums.num?1:(num=s.num?0:-1);public String toString() return num+:+name;static class StudentComparator implements Comparator public int compare(Object o1,Object o2) Student s1=(Student)o1; Student s2=(Student)o2; int result=s1.nums2.num ? 1 : (s1.num=s2.num ? 0 : -1); if(result=0) /String类实现了compareTo()方法. result=pareTo(); return result; public static void printElements(Collection c)Iterator it=c.iterator();while(it.hasNext() System.out.println(it.next();public static void main(String args)Student s1=new Student(2,zhangsan);Student s2=new Student(1,lisi);Student s3=new Student(3,wangwu);ArrayList a1=new ArryList();a1.add(s1);a2.add(s2);a3.add(s3);Collections.sort(a1,Student.StudentComparator();printElements(a1);Collections类中提供了一种反序排列方式.本身返回就是一个比较器对象static Comparator reverseOrder()Arrays.sort()也可以指定一个比较器对象static void sort(Object a,Comparator c)Collections类主要对列表操作.Arrays类主要对数组操作.Vector集合类Vector:用ArrayList代替Vector.Vector内所有方法都是同步的,存取元素效率低.在多线程中可以使用在Collection类中提供了static list synchronizedList(List list)可以返回一个同步列表可以将列表实参传递进去会返回一个安全的线程同步列表还有static Collection synchronizedCollection(Collection c)static Set synchronizedSet(Set s)Hashtable:用HashMap代替Hashtable需要同步Map的时候可以用Collection类的方法static Map synchronizedMap(Map m)但是还是Hashtable获取的同步Map快一些.Stack集合类:Stack:用LinkedList代替Stack.Stack是从java.util.Vector继承而来.还从Vector继承了alementAt()方法.同时Stack还继承了不需要的特性.所以要使用栈的时候要用LinkedList来自己实现.Properties属性类.是从Hashtable继承而来也是存储键值对的.表示一个持久的属性集合.可以存储win.ini的键值对.在java.lang.System类当中有static Properties getProperties()检测当前系统的属性可以使用void list(PrintStream out)打印系统属性还可以读取一个配置文件:先建立一个配置文件winsun.ini写入company=winsunauthor=sunxincorpyri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能网联汽车用户界面设计对用户体验的影响报告
- 如何做好一个新人汇报
- 沈阳市2025-2026学年度上学期期初考试高三语文试题及参考答案
- 2026届吉林省白山市英语九年级第一学期期末调研模拟试题含解析
- 贵州省六盘水二十中学2026届英语九年级第一学期期末检测模拟试题含解析
- 2026届四川省德阳市德阳市第五中学化学九年级第一学期期中调研模拟试题含解析
- 幼儿园后勤管理者工作总结
- 2026届内蒙古鄂尔多斯市东胜区第二中学化学九年级第一学期期中预测试题含解析
- 2026届辽宁省营口市大石桥石佛中学九年级化学第一学期期中质量检测模拟试题含解析
- 金融分析师面试试题及答案详解
- 煤矿安全规程2025版解读
- 监狱公选面试题库及答案
- 尿培养的采集
- 具有法律效应的还款协议书6篇
- 东航空乘英语考试题目及答案
- 2025绿植租赁协议(简易版)
- T-AOPA0062-2024电动航空器电推进系统动力电机控制器技术规范
- 《三级工学一体化师资培训》课件-第四课:教学活动策划
- 2024年一级建造师《民航机场工程管理与实务》真题及答案
- 2025年全国企业员工全面质量管理知识竞赛题及参考答案
- 2025年秋季开学典礼诗歌朗诵稿:纪念抗战胜利八十周年
评论
0/150
提交评论