您的位置:首页 > 编程语言 > Java开发

java 容器学习记录1

2004-07-23 09:41 621 查看
java容器
1.Array
优点:效率,类型识别,可以持有primitives原生类型
缺点:创建后容量固定,不好扩张 。考虑ArrayList
分为两种:对象数组和原生值数组
对象数组持有对象的reference
primitives数组直接持有值
四个基本方法:
equals():比较两个数组是否相等
fill():填充数组,只能用一个字填数组
binarySearch():在一个已排序的数组中查找元素,不支持重复元素
asList():接受数组,转换成List容器
复制一个数组:System.arraycopy(source,index,destination,index,length);复制对象数组时只是复制了reference,对象本身不会被拷贝(浅拷贝),复制primitives是复制值.
equals()相等条件:必须有相同等数量的元素并且每个相同位置的元素相等
设计的一项重要目标就是:把变和不变的东西区分开来,变的地方用接口实现,考虑通用性.
2.Container(容器类都能自动调整大小)
容器的主要任务:存放对象
java中分成两类:Collection(List,Set)与Map。两类区别在于每个位置能放多少对象。
Collection用add()方法增加元素,Map用put()增加元素。
缺点:不知道对象的类型(1.5增加了泛型),只持有Object(超类),即能持有一切对象。
与存放对象有关的接口包括Collection,Set,Map,List,在理想情况下,绝大多数代码应该只同这些接口打交道,只有在创造容器时才精确地指明他的确定类型。
3.List
按特定的顺序持有一组元素对象。最重要的特征是有序,它会确保以一定的顺序保存元素。
基本方法:add(),get(),size(),iterator()
ArrayList:一个能自动扩展的数组。能进行快速的随机访问。
LinkedList:对顺序访问进行了优化,能在中间插入和删除元素。可当成stack,queue,deque来使用。
ListIterator:在ArrayList中只能用在ArrayList反向遍历的场合,不用来插入和删除元素。在LinkedList中,可以在中间插入和删除元素,沿两个方向遍历列表。
4.Set
持有的对象个个都不同,即没有重复的记录。要放进Set的对象必须定义equals().
HashSet:为优化查询速度而设计的。里面的对象还要定义hashCode()方法。
TreeSet:一个有序的Set,底层是一棵树,这样就可以从Set里面提取一个有序序列.
LinkedHashSet:一个内部使用链表的Set,既有HashSet的查询速度又能保存元素加进去的顺序(插入顺序)
5.Map
持有的为“键-值对”,“关联性数组”,在两个对象键建立联系
6.Iterator
Iteratot(迭代器):任务是能让客户程序员在不知道或不关心他所处理的是什么样的底层序列结构的情况下,就能在一个对象序列中前后移动,并选取其中的对象。
Iterator是“轻量级”对象,创建花销很小。
主要方法:
iterator():容器调用此方法传给一个Iterator对象
next():获取下一个元素对象
思路:一下子拿走容器里的所有对象,然后一个一个进行处理
hasNext():查询序列中是否还有对象
remove():删除迭代器返回的最后一个元素对象

7.JDK1.5 对集合新增的功能
a.Generics(泛型),类似于c++Templates(模版)功能,使对象从Collection中取出时不必在downcasting,保证了类型的安全不用Generics时,返回的是java.lang.Object对象,要使用返回的对象必须首先downcasting成特定类型。Generics保证了类型的安全。
b.AutoBoxing/unboxing(自动包裹),自动转换primitive(原始类型)成为object(对象),使这两者之间不再需要烦琐的转换,编译器自动进行检测并转换。
c.foreach,直接迭代Collection中的对象,不需要转换成iterator.非常便利的访问一个Collection中的所有元素。
d.Typesafe Enumerations (枚举类型安全),enum 用来处理一些列表数据,比如:星期,月份,颜色等.枚举意味着列出所有的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息