java基础之持有对象

来源:互联网 发布:编程错误error 编辑:程序博客网 时间:2024/06/06 00:36

今天讨论的是java中的持有对象,也就是java中的容器的作用

首先呢,容器为什么产生:当你要创建的对象只有在运行时才能知道所需对象的数量和类型的时候,也就是编程之前不知道所需对象的数量和类型,这时会让你无法继续进行编程,此刻容器的概念就产生了。

其他语言一般用数据来解决这个问题,如果想保存一组基本类型的数据,这里也推荐使用数组,但数据的尺寸固定,而一般情况下泥饼不知道所需对象的数量,这样数组就显得过于受限制。

Java实用库中提供了一套相当完整的容器类来解决这个问题,Java的类库中使用了Collection这个名词来指代该类库的一个特殊子集,其中包含的4中基本的类型是List、Set、Queue、Map。我们用“容器”这个术语来称呼它们,Java的容器类都可以自动地调整自己的尺寸。

Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java 泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。Java 编译器在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而

泛型约束泛型约束
加快。Java 允许对个别泛型的类型参数进行约束,包括以下两种形式(假设 T 是泛型的类型参数,C 是一般类、泛类,或是泛型的类型参数):T 实现接口 I 。T 是 C ,或继承自 C 。一个泛型类不能实现Throwable接口。

ArrayList保存的Object对象,故所有的类都可以添加到ArrayList中(由于单根继承的缘故),但当你用get()方法取出某一个类的时候,你取出的可能是另外一个类,这时编译器就会报错。这使得Java泛型来创建类会非常复杂,但是,应用预定义的泛型通常会比较简单。例如,ArrayList<Apple>,这时指定了容器中保存的类型,这时编译器会阻止你放入其他的类型如Orange。


Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念

1)Collection,一个独立元素的序列,这些元素都服从一条或多条规则。

List 必须按照插入的顺序保存元素(ArrayList擅长于随机访问元素,在List中间增删元素时较慢、LinkedList随机访问元素时较慢,在List中间增删元素较快)

Set 不能有重复元素(HashSet最快的查找技术、TreeSet升序保存对象、LinkedHashSet按被添加顺序保存对象)

Queue 按照队列规则来确定产生的顺序(通常与他们被插入的顺序相同)只允许从一段插入对象,从另一端移除对象。最典型的FIFO容器

方法:add(index可省略,Object)增加对象、remove()删除对象、contains()是否包含某个对象、get()获取第n个对象、indexOf()获取某个对象索引号、subList(index1,index2)截取List中的一部分、containsAll(Object)是否都包含在内、retainAll()removeAll()addAll()、set(Object)把某个元素设置成Object,与Set类存在潜在的冲突replace()可能会更合适、toArray()将任意Collection转换成一个数组、isEmpty()判断是否为空、clear()清除所有对象。

2)Map,一个成对的“键值对”对象,使用对象来查找某个对象,它也被称为“关联数组”或“字典”。利用键对象来查找值对象。(HashMap最快的查找技术、TreeMap升序保存键和值、LinkedHashMap按被添加顺序保存键和值)


在容器中添加一组元素(Arrays.asList()、Collections.addAll())//Map更加复杂,只能用另一个Map将其初始化

容器的打印:必须使用Arrays.toString()来产生数组的可打印表示

迭代器

Iterator

它的工作是遍历并选择序列中的对象,Java中的Iterator只能单向移动,并且只能用来:

1)使用方法Iterator()方法要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。

2)使用next()获取序列中的下一个元素。

3)使用hasNext()检查序列中是否还有元素。

4)使用remove()将迭代器新近返回的元素删除。

ListIterator

更强大的迭代器,但只能用于List类的访问。可以用set()方法替换它访问过的最后一个元素。可以调用listIterator产生一个指向List开始处的ListIterator,并且还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n处的ListIterator。

Stack

一般指的是LIFO后入先出堆栈

方法:push()入栈、peek()返回栈顶元素,不将其移除、pop()返回栈顶元素,将其移除

通常用LinkedList来带替Stack因为它可以实现Stack的所有功能


原创粉丝点击