一 .集合(Cellection Map)
1.ArrayList 可以动态增长和所讲的索引序列
底层实现为数组,如果要向其中间删除一个数据,那么后面的元素都必须往前移动一个位置,代价非常大,同理中间插入元素的代价也非常大
2.LinkedList 可以在任何位置进行高效插入和删除的操作的有序序列
底层双向链表实现,插入和删除代价小,查询特定元素性能较差,必须从头开始查找。
LinkedList<> list
for(int i;i<list.size();i++)
{
do something
}
//这是一个效率极低的遍历方法,每次都要重头开始,应该用迭代器遍历
3. ArrayDeque 用循环数组实现的双端队列
4. PriorityQueue 允许高效删除最小元素的集合
5.HashSet 没有重复元素的无序集合
6. TreeSet 有序集
7.EnumSet 包含枚举类型值得集合
8.LinkedHashSet 可以记住元素的插入次序的集合
9.HashMap 存储键值关系的数据结构集合
10.TreeMap 键值有序排列的有序的映射表
11. EnumMap 键值属于枚举类型的映射表
12. LinkedHashMap 记住键值项添加次序的映射表
13.WeakHashMap 其值无用后可以被垃圾回收器回收的映射表
14. IdentityHashMap 用== 而不是用equals比较键值得映射表,利用对象的内存地址产生散列码作为key
二 迭代器
1.Iterator
2.ListIterator extends Iterator 提供正反向遍历链表
三 轻量集合包装器
视图的方式访问集合存在的局限性:1.只支持读,无法改变大小、只支持删除而不支持插入
1.Arrays
asList()方法返回一个视图对象;
2. Collections
nCopies(n,anObject) 返回一个包含n个元素,每个元素都是anObject的视图对象
singleton(anObject) 返回一个不可修改的set的视图对象
以上存储代价非常少
Collections.synchronizedMap(new HashMap<>()) 让多线程访问Map对象是多线程安全的
Collections.checkedList(new ArrayList<String>,String.class) 受查视图可以提前探测到传人其他类型的对象,能够立即抛出异常
四 排序
列表排序本该用归并排序是最高效的,而实际实现是它将所有元素转入一个数组,对数组进行排序,然后再将排序好的序列复制回列表。
1.排序对象实现Comparable接口
Collections.sort(new ArrayList<>())
2.直接传入一个比较器
List<> test = new LinkedList<>()
test.sort(Comparator.comparingDouble(Employee::getSalary));
3.随机混乱列表
Collections.shuffle(new ArrayList<>())
4.二分查找
前提是排好序的列表
Collections.binarySearch(List,element)
如果返回负值,则元素插入位置为 -i-1,以保证元素的有效性
5.列表转换数组
HashSet <String>test
Object[] a = test.toArray()
String[] a = test.toArray(new String[0])
String[] a = test.toArray(new String[test.size()]) //这种情况不会再创建一个新的数组