欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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接口

       Java日记:集合

  • map接口

        Java日记:集合

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());