一、ArrayList
ArrayList底层是一个Object[]数组;ArrayList底层数组默认初始化容量是10;
ArrayList的构造方法:
ArrayList():创建一个初始化容量为10的空列表;
ArrayList的优点:
向ArrayList末尾添加元素(add()方法)时,效率较高
查询效率高
ArrayList的缺点:
扩容效率低
无法存储大数据量(因为很难找到一块很大的连续的内存空间)
向ArrayList中间添加元素(add(int index)),需要移动元素,效率较低。
如果增删元素较多,可以考虑使用链表。
如何将ArrayList编程线程安全的呢?
调用Collections工具类中的static List synchronizedList(List list)方法。
二、LinkedList
LinkedList底层是一个双向链表。
LinkedList的优点:
增/删效率高
LinkedList的缺点:
查询效率低
ListIterator接口
LinkedList.add方法只能将数据添加到链表的末尾
如果要把数据添加到链表的中间位置,则需要使用ListIterator接口的add方法
ListIterator是Iterator的一个子接口,其中常用的方法有:
返回值类型 | 方法和描述 |
void |
将制定的元素插入列表 |
boolean |
返回true,如果遍历正向列表,列表的迭代器有多个元素 |
boolean |
返回true,如果遍历反向列表,列表的迭代器有多个元素 |
E |
返回列表中的下一个元素,并且前进光标位置 |
int |
返回随后调用next()返回的元素的索引 |
E |
返回列表中的上一个元素,并向后移动光标的位置 |
int |
返回由后续调用previous()返回的元素的索引 |
void |
从列表中删除由next()或previous()返回的最后一个元素 |
void |
用指定的元素代替next()或previous()返回的最后一个元素 |
总结:
数据结构 | 底层实现 | 优点 | 缺点 | 构造方法 | 常用方法 |
ArrayList |
|
|
| ArrayList():创建一个初始化容量为10的空列表; | ArrayList.add():向末尾添加元素 |
LinkedList | 双向链表 | 增/删效率高 | 查询效率低(每次查询都要从头开始遍历) | LinkedList可以调用get(int index)方法,返回链表中第index个元素 |
三、Vector
Vector底层是数组,初始化容量是10。原容量使用完毕之后,会进行扩容,扩容之后的容量是原始容量的2倍。
Vector是线程安全的(其方法里面带有synchronized关键字),效率较低,目前使用的较少。
四、Set
4.1 HashSet
特点:HashSet无序(没有下标),不可重复。
4.2 TreeSet
特点:TreeSet无序(没有下标),不可重复,但是可以排序。
HashSet是HashMap的key部分;TreeSet是TreeMap的key部分。
五、Java.Math
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
Math中常用的方法:
![](https://i-blog.csdnimg.cn/blog_migrate/8da8d927f65378bab590bcb86316f7b0.png)