集合1
来源:互联网 发布:中国报告大厅数据库 编辑:程序博客网 时间:2024/05/02 00:42
上面为集合框架图,
首先看List,它有LinkedList和ArrayList,前者在它的底层是通过一个双向循环链表实现的,可以通过看它的底层代码,而ArrayList是通过数组来实现的,首先从它的构造方法去进行了解,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组 如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。 对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中。集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。
遍历ArrayList的方法,一个是用它的get(i)方法,另外一个就是用toArray()将它转换为数组,然后再用数组的方式去对它进行遍历.
Linkedlist并不是有序的,它只是用链表来进行维护它里面的元素,结构类似于:
class Node{
Node pre;
Object data;
Node next;
}
真正的结构是:
Entry
{
Entry previous;
Object element;
Entry next;
}
其中的Object类型的元素element就是我们向LinkedList中所添加的元素,然后Entry又构造好了向前与向后的引用previous、next,最后将生成的这个Entry对象加入到了链表当中。换句话说,LinkedList中所维护的是一个个的Entry对象。
然后就是对Set中的HashSet和TreeSet进行说明
当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。实际上hashcode就是类似于一个对象的内存地址.
如果我们重写equals方法,那么也要重写hashCode方法,反之亦然。
对于TreeSet,这是一个排序的Set,当向它插入一个引用类型的对象时,因为它的底层是排序了的,所以直接插入是会出错的,会出现ClassCastException,因为这个对象没有排序的规则,它不知道怎么插入,所以这个对象可以实现Comparelable接口,或者我们自己写一个比较器实现Comparator这个接口,在这里进行排序规则的定义,当用TreeSet时,那么就要用它的TreeSet(Comparator comparator)这个构造方法去进行构造.
注意一点的是:Collection是个接口,java.util中还有一个Collections类它里面有一些很有用的方法.
- 集合1
- 集合 - 1
- 集合1
- 集合1
- 集合1
- 集合---1
- 集合1
- 集合-1
- 集合1
- 集合1
- 集合和泛型2-----集合1
- 黑马程序员-集合1-List集合
- 集合1——Collection集合
- 集合1--List集合及泛型
- Hibernate映射集合属性1__Set集合
- java集合框架(1、集合介绍)
- 集合框架专题1-集合框架概述
- 集合框架1,数组集合ArrayList
- C语言实现顺序表
- 裸机系列——supervivi烧写
- 《STL标准程序库》笔记1
- 心爱的嗲王
- VS2008 PRO 、WDK 和DDKWizard搭建驱动开发环境
- 集合1
- 办公平台主要的目的是什么?
- 共享内存
- 介绍一篇关于session的好文章,写的很详细
- extern "C"----实现c cpp文件的混合编程
- 哲学家就餐问题
- 强人再拍:中国歼15低俗转弯和高速滑行起飞视频!
- 学习小心得11.5.7
- Variable 'X' is used before it has been assigned a value. A null reference exception could result at runtime.