一、集合的顶层是Collection,结构
---|Collection: 单列集合
---|List: 有存储顺序, 可重复
---|ArrayList: 数组实现, 查找快, 增删慢
由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素,所以慢。
数组是可以直接按索引查找, 所以查找时较快 。
---|LinkedList: 链表实现, 增删快, 查找慢
由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素,
后一个元素记住前一个元素,这样的增删效率较高但查询时需要一个一个的遍历, 所以效率较低。
---|Vector: 和ArrayList原理相同, 但线程安全, 效率略低
和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低。
---|Set: 无存储顺序, 不可重复
---|HashSet
---|TreeSet
---|LinkedHashSet
---| Map: 键值对
---|HashMap
---|TreeMap
---|HashTable
---|LinkedHashMap
二、Collection接口的共性方法
1:增加
add() 将指定对象存储到容器中,可以是不同类型元素,add方法的参数类型是Object 便于接收任意对象
addAll() 将指定集合中的元素添加到调用该方法和集合中
2:删除
remove() 将指定的对象从集合中删除
removeAll() 将指定集合中的元素删除
3:修改
clear() 清空集合中的所有元素
4:判断
isEmpty() 判断集合是否为空
contains() 判断集合何中是否包含指定对象
containsAll() 判断集合中是否包含指定集合,使用equals()判断两个对象是否相等
5:获取
int size() 返回集合容器的大小
6:转成数组
toArray() 集合转换数组
三、List特有方法
1:增加
void add(int index, E element) 指定位置添加元素
boolean addAll(int index, Collection c) 指定位置添加集合
2:删除
E remove(int index) 删除指定位置元素
3:修改
E set(int index, E element) 返回的是需要替换的集合中的元素
4:查找:
E get(int index) 注意: IndexOutOfBoundsException
int indexOf(Object o) // 找不到返回-1
lastIndexOf(Object o)
5:求子集合
List<E> subList(int fromIndex, int toIndex) // 不包含toIndex
四、Collection+List的例子:
1:Person类
姓名和年龄。
重写hashCode和equals方法:
(1)如果不重写,调用Object类的equals方法,判断内存地址,为false
如果是Person类对象,并且姓名和年龄相同就返回true
Collection中的contains()和containsAll()都会调用Person中重写的equals()方法判断是否相等
(2)如果不重写,调用父类hashCode方法
如果equals方法相同,那么hashCode也要相同,二者一致,需要重写hashCode方法
重写toString方法:
不重写,直接调用Object类的toString方法,打印该对象的内存地址
2:testCollection类main方法,测试Collection和List
3:代码:
https://github.com/ssyybbiill/java_practise/tree/master/src/main/java/com/example/java_practise
参考:https://www.cnblogs.com/joyco773/p/6759981.html
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。