cellection学习记录

一 .集合(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()]) //这种情况不会再创建一个新的数组


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值