Java日记:集合
程序员文章站
2022-12-06 20:55:06
1. 总体结构 Java的集合类主要由:Collection和Map两个根接口派生而来。总体结构分别如下: Collection接口 Map接口 2. Collection和Iterator接口 包含了通用的集合编辑方法:add,remove,addAll,removeAll,iterator, r ......
1. 总体结构
java的集合类主要由:collection和map两个根接口派生而来。总体结构分别如下:
- collection接口
- map接口
2. collection和iterator接口
- 包含了通用的集合编辑方法:add,remove,addall,removeall,iterator, retainall,size等;
1 collection collection=new arraylist(); 2 collection.add("element 1"); 3 collection.add("element 2"); 4 // 使用lambda表达式遍历集合 5 collection.foreach(obj->system.out.println(obj.tostring())); 6 // iterator遍历集合 7 iterator iterator=collection.iterator(); 8 while(iterator.hasnext()) { 9 system.out.println(iterator.next().tostring()); 10 } 11 // lambda表达式遍历iterator 12 iterator.foreachremaining(obj->system.out.println(obj.tostring())); 13 // foreach循环遍历集合元素 14 for(object obj:collection) { 15 system.out.println(obj.tostring()); 16 } 17 18 // predicate操作集合,是函数式接口 19 collection.removeif(obj->obj.tostring().length()>10); 20 // stream操作集合 21 intstream intstream = intstream.builder().add(20).add(10).build(); 22 system.out.println(intstream.max());
3. set集合
- 原则:不允许包含重复的元素。
- hashset:通过hashcode()决定存储位置,需要确保元素hashcode相同时equals方法也返回true。
- linkedhashset:hashset基础上增加了链表,具有较好的插入性能;
- treeset:通过红黑树对元素排序,需要确保元素compareto和equals方法结果一致。可自行定义比较方式;
- enumset:位向量格式存储,高效,元素按照枚举定义顺序排序,但是只能存储枚举值;
4. list集合
- 是有序集合,实现list接口和listiterator接口;
- arraylist:基于数组实现的list,初始容量为10个,线程不安全;
- vector:基于数组实现的list,线程安全,已过期,不建议使用;
- stack:栈,vector子类,peek,pop,push三个基本方法构成,不就建议使用;
- 固定长度的list:其实是arrays.arraylist类的对象,是固定长度的,不可修改;
5. queue集合
- 队列原则:先进先出
- priorityqueue:通过comparator接口排序的队列,每次取得的元素为比较后的最小值;
- deque->arraydeque:数组实现的双端队列;
- deque->linkedlist:链表实现的双端队列;
6. java8增强的map集合
- set是所有value为null的特殊map,所以set接口和map类似;
1 map map=new hashmap(); 2 map.put("xxx", 109); 3 // 替换指定key对应的value值 4 map.replace("xxx", 666); 5 // 使用当前value和传入参数重新计算value 6 map.merge("xxx", 666, (oldval, param)->(integer)oldval+(integer)param);
- hashmap:key不可重复,最多可以有一个null,hashcode与equals方法结果必须一致;value只要通过equals比较相等就认为是相等的。
- hashtable:是线程安全的。不建议使用;
- linkedhashmap:使用双向链表维护key-value顺序,与插入顺序保持一致;
- properties:是hashtable子类,是线程安全的,维护key-value对;
- sortedmap->treemap:红黑树结构排序的map, compareto和equals方法结果需要保持一致;
- weakhashmap:对于元素是弱引用的,如果元素没有其他地方引用,则gc后会从map中删除;
- identityhashmap:与hashmap一致,但是比较key值采用==而不是equals方法;
- enummap:key值只能是同一类型的enum值,根据枚举值定义顺讯存储;
7. hashset和hashmap性能
- 当hashcode相同而equals为false时,value值通过链表形式存储在同一个位置上,称为‘桶’;
- ‘桶’的出现会降低集合的性能;
8. 操作集合的工具类:collections
- 排序操作:reverse,shuffle,sort,swap,rotate;
- 查找替换:binarysearch,frequency,indexofsublist等;
- 同步控制:
list list=collections.synchronizedlist(new arraylist()); set set=collections.synchronizedset(new hashset());
上一篇: 读书
下一篇: 带着萌新看springboot源码02