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

简单总结一下java中的容器----持有对象

2015-09-30 16:35 597 查看
在java中为我们提供了大量的持有对象的方法,这些方法可以是我们的程序看起来更简洁,更强大,更高效。好了,闲话不说,接下来我们就简单的总结一下java中的持有对象都有哪些。。。

(1)数组,数组将数字和对象联系起来,它保存类型明确的对象,查询对象时,不需要对结果做类型转换。它可以是多维的,可以保存基本类型的数据,但是数据一旦生成,其容量就不能被改变。

(2)Collection保存单一的元素,而Map保存相关联的键值对。有了java的泛型,你就可以指定容器中存放的对象的类型,因此你就不会将错误类型的对象放置到容器中,并且从容器中获取元素时,不必进行类型转换。各种Collection和各种Map都可以在你向其中添加更多元素时,自动调整其尺寸。容器不能持有基本类型,但自动包装机制可以执行基本类型到容器中所持有的包装器类型之间的双向转换。

(3)List类似数组,也是建立数字索引和对象的关联,因此,数组和List都是排好序的容器,List能够自动扩充容量。

(4)如果需要大量的随机访问时,那就需要建立ArrayList,如果需要大量的对元素进行插入,删除操作,那就需要建立LinkedList。

(5)各种Queue和栈的操作,都可以用LinkedList提供支持,也就是说用LinkedList可以创建出一个Queue或者栈。

(6)Map是一种将对象与对象进行相关联的设计。HashMap设计用来快速访问,TreeMap保持“键”始终处于排序的状态,所以没有HashMap快,LinkedHashMap保持元素插入时的顺序,但是也是通过hash函数提供快速的访问能力。

(7)Set是不接受重复元素的集合。HashSet提供最快的查询速度,TreeSet保持元素处于字典排序的状态,LinkedHashSet保持元素插入时的顺序。

(8)新程序中不应该使用过时的集合,比如,Vector,HashTable和Stack。

==============================================值得注意的是Collection和Iterator==========================================

(1)我们要明白Collection是所有序列容器的共性的根接口。使用接口去描述的一个理由就是可以使我们能够创建更通用的代码出来。一个类去实现Collection时,必须要提供iterator()的方法,因为,Collection和Iterator是绑定在一起的。然而,java提供了java.util.AbstractCollection类提供了Collection的默认实现,使得我们可以创建一个AbstractCollection的子类型。

举个例子:

public class NJQ4 extends AbstractCollection<String>{
private String[] s = ("la la de ma xi ya"+"sa sa ai ou ni ya").split(" ");

public static void display(Iterator<String> it){
while(it.hasNext())
System.out.print(it.next());
}

public static void main(String[] args) {
NJQ4 njq = new NJQ4();
display(njq.iterator());
}

@Override
public Iterator<String> iterator() {

return new Iterator<String>() {
private int index = 0;
public boolean hasNext(){
return index < s.length;
}
public String next(){
return s[index++];
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}

@Override
public int size() {

return s.length;
}

}通过迭代器对字符串数组进行打印输出。

(2)让foreach对任何Collection对象进行应用,可以通过是想Iterator的接口,这个接口包含一个能够产生Iterator的iterator()方法,并且Iterator接口被foreach用来在序列中移动。

举个例子:

public class NJQ5 implements Iterable<String>{
private String[] s = ("la la de ma xi ya, sa sa sa ai ou ni ya").split(" ");

public static void main(String[] args) {
NJQ5 njq = new NJQ5();
for(String str : njq.s)
System.out.print(str);
}

@Override
public Iterator<String> iterator() {

return new Iterator<String>(){
private int index = 0;
@Override
public boolean hasNext() {

return index < s.length;
}

@Override
public String next() {

return s[index++];
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}

};
}

}
最后,思考一下:怎样通过适配器的方法,产生一个反向迭代器的能力???下次我们再说这个!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iterator java