028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Java集合类(Collection、Map)概述-创新互联

文章目录
首先,要知道Java中的集合不仅仅是指Set系列,而是(包含Set、List、Queue和Map四种体系),是用于存储数量不等的对象。
其中,Set代表无序、不可重复的集合;
List代表有序、重复的集合;
Map则代表具有映射关系的集合;
Queue代表一种队列集合;

Java集合类主要是由两个接口派生而出:CollectionMap
在这里插入图片描述

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的中江网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!一、Collection和数组的区别

数组:
长度不可变;
无法保存具有映射关系的数据;
数组元素可以是基本类型(byte,short,int,long,float,double,boolean,char)的值,也可以是对象(实际上保存的是对象的引用变量)
集合类:
可以保存长度不确定的数据;
可以保存具有映射关系的数据;
集合里保存的是对象(实际上保存的是对象的引用变量)

二、遍历集合的方法 1.使用lambda表达式遍历集合
//programming=["Java","Python","C#","C++"]
programming.forEach(obj ->System.out.println("迭代集合元素:" + obj));
2.使用Iterator循环遍历Collection
//programming=["Java","Python","C#","C++"]
var it = programming.iterator(); // 获取programming集合对应的迭代器
while (it.hasNext()){// it.next返回的是数据类型是Object类型,因此需要强制类型转换
	var p = (String) it.next();
	System.out.println(p);
}
3.使用foreach循环遍历Collection
//programming=["Java","Python","C#","C++"]
for (var program : programming){var p = (String) program;
	System.out.println(p);
}		
三、使用Predicate操作集合
public class temp {public static void main(String[] args) {var programming = new HashSet<>();
    programming.add("Java");
    programming.add("Python");
    programming.add("C#");
    programming.add("C++");
    programming.add("JavaScript");
    programming.add("Vue");
    System.out.println(calculate(programming, ele ->((String) ele).length() == 3));
    System.out.println(calculate(programming, ele ->((String) ele).contains("C")));
  }

  public static int calculate(Collection objs, Predicate p) {int total = 0;
    for (var obj : objs) {  // 使用Predicate的test()方法判断该对象是否满足Predicate指定的条件
      if (p.test(obj)) {total++;
      }
    }
    return total;
  }
}
四、使用Stream操作集合

独立使用stream的步骤如下:

  1. 使用Stream或XxxStream的builder()类方法创建该Stream对应的Builder;
  2. 重复调用Builder的add()方法向流中添加多个元素;
  3. 调用Builder的build()方法获取对应的Stream;
  4. 调用Stream的聚集方法;
    (对于大部分的聚集方法,每个Stream只能执行一次,所以下面执行了两个聚集方法allMatch和map,在两个方法之间又重新定义了一个变量is1,给第二个聚集方法使用)
public static void main(String[] args) {var is = IntStream.builder().add(3).add(1).add(2).add(9).build();
    System.out.println("is所有元素是否都是偶数:" + is.allMatch(ele ->ele % 2 == 0));

    var is1 = IntStream.builder().add(3).add(1).add(2).add(9).build();
    var newIs = is1.map(ele ->ele * 3 + 5);
    newIs.forEach(System.out::println);
    //    is.forEach(ele ->System.out.println(ele % 2));
  }

Stream提供了大量的方法进行聚集操作,这些方法既可以是“中间的”,也可以是“末端的”。上述的allMatch就是末端操作,map是中间操作。
中间操作:允许流保持打开状态,并允许直接调用后续方法,中间方法的返回值是另外一个流;
末端方法:对流的最终操作。当对某个Stream执行末端方法后,该流将会被“消耗”,切不可再用。
所以上述的is流进行了allMatch末端操作后,被消耗,不可再次使用;

常用的中间操作:filtermapToXxxpeekdistinctsortedlimit
常用的末端方法:forEachtoArrayreduceminmaxcountanyMatchallMatchnoneMatchfindFirstfindAny

五、Set集合 1.HashSet

HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。

2.LinkedHashSet3.TreeSet4.EnumSet5.Set实现类的选择

性能:EnumSet >HashSet >TreeSet
需要一个保持排序的Set:TreeSet
遍历:LinkedHashSet >HashSet
即一般情况下选HashSet,需要排序TreeSort,强调遍历LinkedHashSet枚举EnumSet

六、List集合 1.ArrayList(基于数组的线性表)2.Vector七、Queue 1.PriorityQueue2.Deque3.ArrayDeque4.LinkedList(基于链的线性表)5.各种线性表的选择八、Map

Set接口下有HashSetLinkedHashSetSortedSetTreeSetEnumSet等子接口和实现类;
Map接口下有HashMapLinkedHashMapSortedMapTreeMapEnumMap等子接口和实现类;
Map的类和子接口中Key集的存储形式和对应的Set集合中的元素存储形式完全相同;
从Java源码来看,Java先是实现了Map,然后通过包装一个所有value均为空对象的Map就实现了Set集合;
Map提供了一个Entry内部类来封装key-value对,而计算Entry存储时则只考虑Entry封装的key;

1.HashMap2.Hashtable(古早,和Vector一样)3.LinkedHashMap
scores.forEach((key,value) ->System.out.println(key + "-->" + value));
4.Properties5.TreeMap6.WeakHashMap7.IdentityHashMap8.Map实现类的选择

性能:EnumMap >HashMap(IdentityHashMap) >LinkedHashMap >Hashtable >TreeMap
强调排序:TreeMap >HashMap

九、操作集合的工具类:Collections
  1. 排序
  2. 查找替换
  3. 同步控制synchronizedXxx
  4. 设置不可变集合:emptyXxxsingletonXxxunmodifiableXxx、(Java9新增的:Set、List、Map的of方法)

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站名称:Java集合类(Collection、Map)概述-创新互联
链接URL:http://www.tsicrk.com/article/csjegi.html

其他资讯

让你的专属顾问为你服务

0.7209s