Collection 接口

package com.sq.sgg;import java.util.Objects;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}// 重写 equals 后// System.out.println(coll.contains(new Person("Jerry",20)));// false// 变为//System.out.println(coll.contains(new Person("Jerry",20)));// true@Overridepublic boolean equals(Object o) {System.out.println("Person equals......");if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age && Objects.equals(name, person.name);}//    @Override
//    public int hashCode() {//        return Objects.hash(name, age);
//    }
}
package com.sq.sgg;import org.junit.Test;import java.util.*;/*一、集合框架的概述:1.集合、数组都是对多个数据进行存储操作的结构,简称 Java 容器。说明:此时的存储,主要是对内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)2.1 数组在存储多个数据方面的特点:> 一旦初始化以后,其长度就确定了。> 数组一旦定义好,其元素的类型就确定了。我们只能操作指定类型的数据。比如:String[] arr; int[] arr1; Object[] arr2;2.2 数组在存储多个数据方面的缺点:> 一旦初始化以后,其长度就不可修改。> 数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高> 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用> 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。一方面,面向对象语言事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用 Array 存储对象方面具有一些弊端,二 Java 集合就像一种容器,可以动态把多个对象的引用放入容器中。> 数组在内存存储方面的特点:· 数组初始化以后,长度就确定了。· 数组声明的类型,就决定了进行元素初始化时的类型>  数组在存储数据方面的弊端:· 数组初始化以后,长度就不可变了,不便于扩展· 数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。同时无法直接获取存储单元的个数· 数组存储的数据是有序的、可以重复的。--> 存储数据的特点单一Java 集合类可以用于存储数量不等的多个对象,还可以用于保存具有映射关系的关联数组。二、集合框架|-----Collection 接口:单列集合,用来存储一个一个的对象|----- List接口:存储有序的、可重复的数据  --> "动态"数组|-----ArrayList、LinkedList、Vector|----- Set接口:存储无序的、不可重复的数据  --> 高中讲的"集合"|-----HashSet、LinkedHashSet、TreeSet|-----Map接口:双列集合,用来存储一对(key - value)一对的数据  --> 高中函数:y = f(x)|-----HashMap、LinkedHashMap、TreeMap、Hashtable、Properties三、Collection 接口中的方法的使用结论:向 Collection 接口的实现类的对象中添加数据 obj 时,要求 obj 所在的类重写 equals();*/
public class CollectionTest {@Testpublic void test1(){Collection coll = new ArrayList();// add(Object e): 将元素 e 添加到集合 coll 中coll.add("AA");coll.add("BB");coll.add(123);// 自动装箱coll.add(new Date());// size():获取添加的元素的个数System.out.println(coll.size());// 4// addAll(): 将 coll1 集合中的元素添加到当前的集合中Collection coll1 = new ArrayList();coll1.add(456);coll1.add("CC");coll.addAll(coll1);System.out.println(coll.size());// 6System.out.println(coll);// [AA, BB, 123, Thu Jul 15 12:53:56 CST 2021, 456, CC]// clear():清空集合元素coll.clear();// isEmpty(): 判断当前集合是否为空System.out.println(coll.isEmpty());// true}// Collection 接口中声明的方法的测试@Testpublic void test2(){Collection coll = new ArrayList();coll.add(123);coll.add(456);coll.add(new String("Tom"));coll.add(false);
//        Person p = new Person("Jerry",20);
//        coll.add(p);coll.add(new Person("Jerry",20));// 1.contains(Object obj): 判断当前集合中是否包含 obj// 我们在判断时会调用 obj 对象所在类的 equals();boolean contains = coll.contains(123);System.out.println(contains);// trueSystem.out.println(coll.contains(new String("Tom")));// true
//        System.out.println(coll.contains(p));// trueSystem.out.println(coll.contains(new Person("Jerry",20)));// false --> true// 2.containsAll(Collection coll1): 判断形参 coll1 中的所有元素是否都存在于当前集合中Collection coll1 = Arrays.asList(123,456);System.out.println(coll.containsAll(coll1));// true}@Testpublic void test3(){// 3.remove(Object obj):从当前集合中移出 obj 元素。Collection coll = new ArrayList();coll.add(123);coll.add(456);coll.add(new Person("Jerry",20));coll.add(new String("Tom"));coll.add(false);coll.remove(123);System.out.println(coll);// [456, Person{name='Jerry', age=20}, Tom, false]coll.remove(new Person("Jerry",20));System.out.println(coll);// [456, Tom, false]// 4.removeAll(Collection coll1):差集:从当前集合中移除 coll1 中所有元素Collection coll1 = Arrays.asList(1234,456);coll.removeAll(coll1);System.out.println(coll);// [Tom, false]}@Testpublic void test4(){Collection coll = new ArrayList();coll.add(123);coll.add(456);coll.add(new Person("Jerry",20));coll.add(new String("Tom"));coll.add(false);// 5.retainAll(Collection coll1): 交集:获取当前集合和 coll1 集合的交集,并返回给当前集合
//        Collection coll1 = Arrays.asList(123,456,789);
//        coll.retainAll(coll1);
//        System.out.println(coll);// [123, 456]// 6.equals(Object obj):要想返回 true,需要当前集合和形参集合的元素都相同Collection coll2 = new ArrayList();coll2.add(123);coll2.add(456);coll2.add(new Person("Jerry",20));coll2.add(new String("Tom"));coll2.add(false);System.out.println(coll.equals(coll2));// true}@Testpublic void test5(){Collection coll = new ArrayList();coll.add(123);coll.add(456);coll.add(new Person("Jerry",20));coll.add(new String("Tom"));coll.add(false);// 7.hashCode(): 返回当前对象的哈希值System.out.println(coll.hashCode());// -783340298// 8.集合 --> 数组 : toArray()Object[] arr = coll.toArray();for(int i = 0; i < arr.length; i++){System.out.println(arr[i]);}
//        123
//        456
//        Person{name='Jerry', age=20}
//        Tom
//        false// 拓展: 数组 --> 集合: 调用 Arrays 类的静态方法 asList()List<String> list = Arrays.asList(new String[]{"AA","BB","CC"});System.out.println(list);// [AA, BB, CC]List<int[]> arr1 = Arrays.asList(new int[]{123, 456});System.out.println(arr1);// [[I@78e03bb5]System.out.println(arr1.size());// 1List arr2 = Arrays.asList(123, 456);System.out.println(arr2);// [123, 456]System.out.println(arr2.size());// 2List arr3 = Arrays.asList(new int[]{123, 456});System.out.println(arr3);// [[I@5e8c92f4]System.out.println(arr3.size());// 1List arr4 = Arrays.asList(new Integer[]{123, 456});System.out.println(arr4);// [123, 456]System.out.println(arr4.size());// 2// 9.iterator(): 返回 Iterator 接口的实例,用于遍历集合元素。放在 IteratorTest 中}
}
package com.sq.sgg;import org.junit.Test;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*集合元素的遍历操作,使用迭代器 Iterator 接口1.内部的方法:hasNext() 和 next()2.集合对象每次调用 iterator() 方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。3.内部定义了 remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用 remove()Iterator 对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。GOF 给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不许暴露该对象的内部细节。迭代器模式,就是为容器而生。Collection 接口继承了 java.lang.Iterable接口,该接口有一个 iterator9)方法,那么所有实现了 Collection 接口的集合类都有一个 iterator() 方法,用以返回一个实现了Iterator 接口的对象> Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。> 集合对象每次调用 iterator() 方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前*/
public class IteratorTest {@Testpublic void test1(){Collection coll = new ArrayList();coll.add(123);coll.add(456);coll.add(new Person("Jerry",20));coll.add(new String("Tom"));coll.add(false);Iterator iterator = coll.iterator();// 方式一:
//        System.out.println(iterator.next());// 123
//        System.out.println(iterator.next());// 456
//        System.out.println(iterator.next());// Person{name='Jerry', age=20}
//        System.out.println(iterator.next());// Tom
//        System.out.println(iterator.next());// false
//        // 报异常:NoSuchElementException
//        System.out.println(iterator.next());// 方式二:不推荐
//        for (int i = 0; i < coll.size(); i++) {//            System.out.println(iterator.next());
//        }// 方式三:推荐// hasNext(): 判断是否还有下一个元素while(iterator.hasNext()){ // 有元素进入// next(): ①指针下移 ②将下移以后集合位置上的元素返回System.out.println(iterator.next());}}@Testpublic void test2(){Collection coll = new ArrayList();coll.add(123);coll.add(456);coll.add(new Person("Jerry",20));coll.add(new String("Tom"));coll.add(false);// 错误方式一:
//        Iterator iterator = coll.iterator();
//        while(iterator.next() != null){ // 省略 hasNext() 报错
//            System.out.println(iterator.next());
//        }// 错误方式二:// 集合对象每次调用 iterator() 方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
//        while((coll.iterator().hasNext())){ // 死循环 一直输出第一个位置的元素
//            System.out.println(coll.iterator().next());
//        }}// 测试 Iterator 中的 remove()// 如果还未调用 next() 或在上一次调用 next 方法之后已经调用了 remove 方法,// 再调用 remove 都会报 IllegalStateException。@Testpublic void test3(){Collection coll = new ArrayList();coll.add(123);coll.add(456);coll.add(new Person("Jerry",20));coll.add(new String("Tom"));coll.add(false);// 删除集合中"Tom"Iterator iterator = coll.iterator();while(iterator.hasNext()){// 报错
//            iterator.remove();Object obj = iterator.next();if("Tom".equals(obj)){iterator.remove();// 报错
//                iterator.remove();}}// 遍历集合Iterator iterator1 = coll.iterator();while (iterator1.hasNext()){System.out.println(iterator1.next());}
//        123
//        456
//        Person{name='Jerry', age=20}
//        false}
}

Collection 接口(含迭代器)相关推荐

  1. 进阶04 4 Collection集合类+Iterator迭代器+增强for+泛型

    文章目录 Collection集合 集合概述 java.util.Collection接口 Iterator迭代器 Iterator接口 Iterator接口的常用方法 说明 迭代器实现原理图: 增强 ...

  2. java学习笔记20(Arraylist复习,Collection接口方法,迭代器,增强型for循环)

    集合:集合是Java提供的一种容器,可以用来存储多个数据: 集合与数组的区别:集合的长度是可变的,数组的长度是固定的 集合中存储的数据必须是引用类型数据: ArrayList回顾: public cl ...

  3. 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型

    2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...

  4. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  5. Java集合框架系列教程三:Collection接口

    翻译自:The Collection Interface 一个集合表示一组对象.Collection接口被用来传递对象的集合,具有最强的通用性.例如,默认所有的集合实现都有一个构造器带有一个Colle ...

  6. java list接口为何要重新声明collection接口的方法_JAVA Collection接口中List Map 和Set的区别(转)...

    Java中的集合包括三大类,它们是Set(集).List(列表)和Map(映射),它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashS ...

  7. java collection 用法_Java中Collection接口的用法

    Collection接口是List.Set.Queue接口的父接口 Collection接口定义了可用于操作List.Set和Queue的方法--增删改查 List接口及其实现类--ArrayList ...

  8. java之集合框架一Collection接口

    1.集合的由来: 我们学习的是面向对象的语言.而面向对象语言对事物的描述是通过对象体现的.为了方便对多个对象进行操作,我们就必须把多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该是 ...

  9. Java™ 教程(Collection接口)

    Collection接口 Collection表示一组称为其元素的对象,Collection接口用于传递需要最大通用性的对象集合,例如,按照惯例,所有通用集合实现都有一个带有Collection参数的 ...

最新文章

  1. 全网最具深度的三次握手、四次挥手讲解,深夜思考
  2. 【转】pDc-SelectObject(pOldBrush)恢复画刷
  3. 平凡的世界和你我 (武惠良与杜丽丽)
  4. cocos2d-x for android配置 运行 Sample on Linux OS
  5. java jvm目录,JVM(Java虚拟机)中过程工作目录讲解
  6. 微信平台开发应用的签名
  7. JZOJ 6290. 倾斜的线
  8. macOS 10.15安装GDB
  9. 重学C---------第五节:常量
  10. 图(用list邻接表表示)的深度优先和广度优先(递归和非递归实现)
  11. 快应用实现网络测速功能_网络阅卷系统应用系统功能实现情况
  12. java apns ssl错误_无法使用Javapns/Javaapns SSL握手失败发送推送通知
  13. MATLAB实现滚动密钥密码
  14. Android 10上的F2FS文件系统制作
  15. linux 使用秘钥认证,linux 密钥验证登录
  16. php短信验证码接口怎么写,PHP 攻击短信验证码接口
  17. 电信近期有充值送红包的活动
  18. 致即将逝去的大二和写给就要到来的大三
  19. stg分区边界值问题
  20. 利用动网论坛dvBBS漏洞上传webshell

热门文章

  1. IDEA配置JDK的几种方式
  2. 保护健康——珍爱生命(1)
  3. 解析 Flow:从爆款应用到公链的进化之路
  4. C# Pen绘制虚线(System.Drawing.Pen与System.Windows.Media.Pen)
  5. 06Java异常和网络编程
  6. 秒懂的shell编程数组与冒泡算法排序详解
  7. 错误模块名称 php5ts.dll_Apache服务器遇到PHP5ts.dll错误的解决办法 - Apache - 数安时代(GDCA)SSL证书官网...
  8. (四)【平衡小车制作】陀螺仪MPU6050
  9. EasyCVR分发的FLV视频流出现延迟,该如何正确配置参数?
  10. 模拟下线程池队列无界或线程无限的OOM情况