集合(Collection)

集合就是Java中提供的一种 空器,可以用来存储多个数据。

集合和数组都是一个容器,它们有什么区别呢?

  • 数组的长度是固定的,集合的长度是可变的。
  • 数组中存储的是同一类型的数据,并且也可以存储基本类型数据,但是集合中存储的都是对象,并且没有泛型的时候,还可以存储不同的对象。

Collection集合框架

Collection是一个集合类的顶级接口,所有的集合类的接口都是他的子类,或者实现类。

List接口:

1、在序的集合

2、允许存储生活重复的元素

3、有索引,可以使用普通的for循环遍历

set接口:

1、不允许有重复的元素

2、没有索引,不能进行普通的for循环

3、LinkedHashSet是有序的集合

Collection里面的方法

为什么要学习Collection里面的方法,是因为在用所有的Collection的实现类的时候,都可以用这些方法,所以学习这些方法就相当于学习了所有子类的方法,在以后学习子类方法的时候,只用学习一部分子类特有的就行了。

public boolean add(E e); 把给定的对象添加到当前集合中

public void clear(E e);清空集合中所有的元素

public boolean remove(E e);把给定的对象在当前集合中删除

public boolean contains(E e);判断当前集合中是否包含给定对象

public boolean isEmpty();判断当前集合是否为空

public int size();返回集合中元素的个数

public Object[] toArray();把集合中的元素,存储到数组中

使用:

创建一个集合:

public boolean add(E e);` 把给定的对象添加到当前集合中

    //使用多态
Collection<String> coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("c");
coll.add("d");
//输出
System.out.println(coll);   //[a, b, c, d]

public void clear(E e);清空集合中所有的元素

    coll.clear();
System.out.println(coll);   //[]

public boolean remove(E e);把给定的对象在当前集合中删除

    coll.remove("a");
System.out.println(coll);   //[b, c, d]

public boolean contains(E e);判断当前集合中是否包含给定对象

    //包含返回true,没有返回false
System.out.println(coll.contains("c")); //true

public boolean isEmpty();判断当前集合是否为空

    //判断当前集合是否为空,如果为空则为true,否则为false
System.out.println(coll.isEmpty());     //false

public int size();返回集合中元素的个数

    System.out.println(coll.size());    //4

public T[] toArray(T[] a);把集合中的元素,存储到数组中

    //创建一个数组,这个数组的长度就是集合的长度
String[] strArr = new String[coll.size()];
//然后把集合中的元素全都存到数组中
coll.toArray(strArr);
for (String s : strArr) {
System.out.println(s);
/* 循环输出:
a
b
c
d
*/
}

迭代器(Iterator)

我们在开发中经常需要遍厉集合,所以JDK专门提供了一个接口java.util.Iterator,这个接口的作用主要是用来迭代访问Collection中的元素的,所以换为迭代器。

迭代器(Iterator)的原理和使用

因为Collection继承了Iterator,所以可以使用Collection里面的iterator(),来获取迭代器。

最初的迭器的使用:

    //使用多态
Collection<String> coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("c");
coll.add("d");
System.out.println(coll); //[a, b, c, d]
//通过集合获取迭代器
Iterator<String> iterator = coll.iterator();
//用hasNext()方法来判断有没有下一个元素,如果有返回true
while (iterator.hasNext()) {
//用next()来获取下一个元素
//并且下标也移动到了当前元素下面,以方便上面的判断
String s = iterator.next();
System.out.println(s);
/* 迭代的结果:
a
b
c
d
*/
}

使用增强for循环:foreach来遍历集合,其实foreach里面也是使用Iterator来实现的。

    for (String s : coll) {
System.out.println(s);
/* 循环的结果:
a
b
c
d
*/
}

使用Java8里面的新特性Lambda表达式循环集合,其实这个里面封装的是增强for循环。

    coll.forEach(x -> System.out.println(x));
/* 循环的结果:
a
b
c
d
*/

forEach里面的方法:

    default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}

这个方法是在Iterator里面,是一个默认方法,因为Collection继承了这个方法,所以可以使用这个方法。

集合工具(Collections)

java.utils.Collections集合工具类,就是用来简化对集合进行操作的。

常用的方法

  • pubic stativc <T> boolean addAll(Collection<T> c,T... elements);往集合中批量添加元素。
  • public static void shuffle(List<?> list); 乱序。
  • public static <T> void sort(List<T> list); 将集合中的元素按昭默认规则排序。
  • public static <T> void sort(List<T> list, Comparator<? super T>);将集合中的元素按照指定规则进行排序。

使用

pubic stativc <T> boolean addAll(Collection<T> c,T... elements);往集合中批量添加元素。

    List<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "d");
System.out.println(list); //[a, b, c, d]

public static void shuffle(List<?> list); 乱序。

    List<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "d");
System.out.println(list); //[a, b, c, d]
Collections.shuffle(list);
System.out.println(list); //[d, b, a, c]随机的

public static <T> void sort(List<T> list); 将集合中的元素按昭默认规则排序。

    List<String> list = new ArrayList<>();
//无序的
Collections.addAll(list, "b", "d", "g", "o");
Collections.sort(list);
System.out.println(list); //[b, d, g, o]

public static <T> void sort(List<T> list, Comparator<? super T>);将集合中的元素按照指定规则进行排序。

    List<Integer> list = new ArrayList<>();
list.add(9);
list.add(3);
list.add(4);
list.add(2);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//return o2 - o1; //[9, 4, 3, 2] 降序
return o1 - o2; //[2, 3, 4, 9] 升序
}
});
System.out.println(list);

细节决定成败!

个人愚见,如有不对,恳请扶正!

Java | 集合(Collection)和迭代器(Iterator)的更多相关文章

  1. Java集合 Collection、Set、Map、泛型 简要笔记

    集合 什么是集合 概念 对象的容器,实现了对对象常用的操作 和数组的区别 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型 位置 java.util.*; Colle ...

  2. Java 集合系列18之 Iterator和Enumeration比较

    概要 这一章,我们对Iterator和Enumeration进行比较学习.内容包括:第1部分 Iterator和Enumeration区别第2部分 Iterator和Enumeration实例 转载请 ...

  3. Java 集合-Collection接口和迭代器的实现

    2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...

  4. java 集合2(迭代器)

    迭代器方法:(把迭代器想象成抓娃娃机的爪子) hasNext()     问是否有元素可遍历,如果有元素可以遍历,返回true,否则返回false 工作原理:这一个迭代的过程是这样的,获取到迭代器时候 ...

  5. java集合——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

  6. Thinking in Java——集合(Collection)

    一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...

  7. java集合的操作(set,Iterator)

    集合的操作 Iterator.Collection.Set和HashSet关系 Iterator<——Collection<——Set<——HashSet Iterator中的方法: ...

  8. JAVA集合--Collection接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     在概述里面也说过:Collection是jav ...

  9. Java 集合Collection与List的详解

    1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...

  10. Java集合--Collection

    概要 首先,我们对Collection进行说明.下面先看看Collection的一些框架类的关系图: Collection是一个接口,它主要的两个分支是:List 和 Set. List和Set都是接 ...

随机推荐

  1. Go语言的函数06---闭包函数

    package main import "fmt" /* 李逵和武松的Study方法的逻辑是几乎一模一样的 然而为了分别保存两人的学习进度,需要开辟两个全局变量,函数内部的需要使用 ...

  2. 部署TVM Runtime

    部署TVM Runtime本文主要介绍如何在开发板上部署TVM Runtime, 在本地机器安装完整的TVM(包含了TVM Runtime以及编译功能), 并且使用一个简单的远程调用例子测试是否部署成 ...

  3. AI框架类FAQ

    AI框架类FAQ 数据处理 问题:如何在训练过程中高效读取数量很大的数据集? 答复:当训练时使用的数据集数据量较大或者预处理逻辑复杂时,如果串行地进行数据读取,数据读取往往会成为训练效率的瓶颈.这种情 ...

  4. 用于ONNX的TensorRT后端

    用于ONNX的TensorRT后端 解析ONNX模型以使用TensorRT执行. 另请参阅TensorRT文档. 有关最近更改的列表,请参见changelog. 支持的TensorRT版本 Maste ...

  5. JUC 并发编程--04 常用的辅助类CountDownLatch , CyclicBarrier , Semaphore , 读写锁 , 阻塞队列,CompletableFuture(异步回调)

    CountDownLatch 相当于一个减法计数器, 构造方法指定一个数字,比如6, 一个线程执行一次,这个数字减1, 当变为0 的时候, await()方法,才开始往下执行,, 看这个例子 Cycl ...

  6. 使用regulator_get时的一个小注意事项

    Linux kernel 使用 regulator 框架来管理电源,比如 PMIC 芯片上常见的LDO.使用 regulator 的常规流程如以下代码所示: void set_vbus_voltage ...

  7. 【NX二次开发】镜像对象

    使用uf5946获取镜像矩阵注意:uf5946镜像这个函数,只能用#define UF_plane_type=46这种类型的数据作为镜像面,不能用#define UF_datum_plane_type ...

  8. 网络游戏逆向分析-3-通过发包函数找功能call

    网络游戏逆向分析-3-通过发包函数找功能call 网络游戏和单机游戏的分析有相似点,但是区别还是很大的. 网络游戏和单机游戏的区别: 网络游戏是需要和服务器进行交互的,网游中的所有功能几乎都会先发送封 ...

  9. PTA4-6题目集总结与归纳

    前言: 继上篇blog所写的几种日期的求法,这次是把那几种聚合起来,即日期类的聚合设计.除下这类,一种是图形继承设计的3种变化,还有一种是3次对正则表达式的应用.当然,作为一个菜鸟,还是无法写成大佬的 ...

  10. Kubernetes集群安装

    一.环境介绍 主机名 IP地址 master 192.168.0.100 node1 192.168.0.101 node2 192.168.0.102 1.1.操作系统: CensOS8.4.210 ...