Java基础day14

  • Java基础day14-集合
  • 1.Collection集合
    • 1.1集合体系结构
    • 1.2Collection集合概述和基本使用
    • 1.3Collection集合的常用方法
    • 1.4Collection集合的遍历
    • 1.5集合使用步骤图解
    • 1.6集合的案例-Collection集合存储学生对象并遍历
  • 2.List集合
    • 2.1List集合概述和特点
    • 2.2List集合的特有方法
    • 2.3集合的案例-List集合存储学生对象并遍历
    • 2.4并发修改异常
    • 2.5列表迭代器
    • 2.6增强for循环
    • 2.7集合的案例-List集合存储学生对象三种方式遍历
  • 3.数据结构
    • 3.1数据结构之栈和队列
    • 3.2数据结构之数组和链表
  • 4.List集合的实现类
    • 4.1List集合子类的特点
    • 4.2集合的案例-ArrayList集合存储学生对象三种方式遍历
    • 4.3LinkedList集合的特有功能

Java基础day14-集合

1.Collection集合

1.1集合体系结构

  • 集合类的特点
    提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变
  • 集合类的体系图

1.2Collection集合概述和基本使用

  • Collection集合概述
    是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
    JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
  • Collection集合基本使用
import java.util.ArrayList;
import java.util.Collection;public class demo1 {public static void main(String[] args) {Collection<String> s = new ArrayList<String>();s.add("hello");s.add("world");s.add("java");System.out.println(s);}
}

1.3Collection集合的常用方法

方法名 说明
boolean add(E e) 添加元素
boolean remove(Object o) 从集合中移除指定的元素
void clear() 清空集合中的元素
boolean contains(Object o) 判断集合中是否存在指定的元素
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中元素的个数

1.4Collection集合的遍历

  • 迭代器的介绍
    迭代器,集合的专用遍历方式
    Iterator iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
    迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的
  • Collection集合的遍历
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class demo2 {public static void main(String[] args) {//创建集合对象Collection<String> c = new ArrayList<String>();//添加元素c.add("hello");c.add("world");c.add("java");//Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到Iterator<String> it = c.iterator();//用while循环改进元素的判断和获取while(it.hasNext()){String s = it.next();System.out.println(s);}}
}

1.5集合使用步骤图解

  • 使用步骤

1.6集合的案例-Collection集合存储学生对象并遍历

  • 案例需求
    创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
  • 代码实现
//学生类
public class Student {private String name;private int age;public Student() {}public Student(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;}
}
//测试类
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class test1 {public static void main(String[] args) {//先创建collection集合Collection<Student> c = new ArrayList<Student>();//创建学生对象Student s1 = new Student("林青霞",30);Student s2 = new Student("张曼玉",30);Student s3 = new Student("张柏芝",30);//添加对象c.add(s1);c.add(s2);c.add(s3);//遍历集合Iterator<Student> it = c.iterator();while(it.hasNext()){Student s = it.next();System.out.println(s.getName()+","+s.getAge());}}
}

2.List集合

2.1List集合概述和特点

  • List集合概述
    有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
    与Set集合不同,列表通常允许重复的元素
  • List集合特点
    有索引
    可以存储重复元素
    元素存取有序

2.2List集合的特有方法

方法名 描述
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 删除指定索引处的元素,返回被删除的元素
E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
E get(int index) 返回指定索引处的元素

2.3集合的案例-List集合存储学生对象并遍历

  • 案例需求
    创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
  • 代码实现
//学生类
public class Student {private String name;private int age;public Student() {}public Student(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;}
}
//测试类
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class test {public static void main(String[] args) {//创建集合对象List<Student> L = new ArrayList<Student>();//创建学生对象Student s1 = new Student("林青霞", 30);Student s2 = new Student("张柏芝", 33);Student s3 = new Student("张曼玉", 33);//学生添加进集合L.add(s1);L.add(s2);L.add(s3);//迭代器方式Iterator<Student> it = L.iterator();while (it.hasNext()) {Student s = it.next();System.out.println(s.getName() + "," + s.getAge());}System.out.println("---------");//for循环方式for(int i =0;i<L.size();i++){Student s = L.get(i);System.out.println(s.getName() + "," + s.getAge());}}
}

2.4并发修改异常

  • 出现的原因
    迭代器遍历的过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际
    修改值不一致,则会出现:ConcurrentModificationException
  • 解决的方案
    用for循环遍历,然后用集合对象做对应的操作即可
  • 示例代码
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class test2 {public static void main(String[] args) {//创建集合对象List<String> list = new ArrayList<String>();//添加元素list.add("hello");list.add("world");list.add("java");//遍历集合,得到每一个元素,看有没有"world"这个元素,如果有,我就添加一 个"javaee"元素,请写代码实现
/*Iterator<String> it = list.iterator();while(it.hasNext()){String s = it.next();if(s.equals("world")){list.add("javaee");}}
*/for (int i = 0; i < list.size(); i++) {String s = list.get(i);if (s.equals("world")) {list.add("javaee");}}System.out.println(list);}
}

2.5列表迭代器

  • ListIterator介绍
    通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
    用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
  • 示例代码
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class test3 {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("hello");list.add("world");list.add("java");ListIterator<String> lit = list.listIterator();while(lit.hasNext()){String s = lit.next();if(s.equals("world")){lit.add("javaee");}}System.out.println(list);}
}

2.6增强for循环

  • 定义格式

      for(元素数组类型 变量名 : 数组/集合对象名){循环体;}
    
  • 代码示例

import java.util.ArrayList;
import java.util.List;public class test4 {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};for (int i : arr){System.out.println(i);}System.out.println("-------");String[] strArray = {"hello","world","java"};for(String s : strArray){System.out.println(s);}System.out.println("-------");List<String> list = new ArrayList<>();list.add("hello");list.add("world");list.add("javaee");for(String s : list){System.out.println(s);}System.out.println("------");/*//内部原理为一个Iterator迭代器for(String s : list){if(s.equals("world")){list.add("javaee"); //ConcurrentModificationException}}*/}
}

2.7集合的案例-List集合存储学生对象三种方式遍历

  • 案例需求
    创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
  • 代码实现

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class test {public static void main(String[] args) {List<Student> list = new ArrayList<Student>();//新建学生对象Student s1 = new Student("林青霞", 30);Student s2 = new Student("张柏芝", 33);Student s3 = new Student("张曼玉", 33);//添加学生对象list.add(s1);list.add(s2);list.add(s3);//遍历学生对象//迭代器Iterator<Student> it = list.iterator();while (it.hasNext()) {Student s = it.next();System.out.println(s.getName() + "," + s.getAge());}System.out.println("-------");//for循环for (int i = 0; i < list.size(); i++) {Student s = list.get(i);System.out.println(s.getName() + "," + s.getAge());}System.out.println("-------");//增强for循环for(Student ss :list){System.out.println(ss.getName() + "," + ss.getAge());}}
}

3.数据结构

3.1数据结构之栈和队列

  • 栈结构
    先进后出
  • 队列结构
    先进先出

3.2数据结构之数组和链表

  • 数组结构
    查询快、增删慢
  • 队列结构
    查询慢、增删快

4.List集合的实现类

4.1List集合子类的特点

  • ArrayList集合
    底层是数组结构实现,查询快、增删慢
  • LinkedList集合
    底层是链表结构实现,查询慢、增删快

4.2集合的案例-ArrayList集合存储学生对象三种方式遍历

  • 案例需求
    创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
  • 代码实现
//学生类
public class Student {private String name;private int age;public Student() {}public Student(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;}
}//测试类
import java.util.ArrayList;
import java.util.Iterator;public class test {public static void main(String[] args) {//创建ArrayList集合对象ArrayList<Student> array = new ArrayList<>();//创建学生对象Student s1 = new Student("林青霞", 30);Student s2 = new Student("张曼玉", 30);Student s3 = new Student("林青霞", 30);//把学生添加到集合array.add(s1);array.add(s2);array.add(s3);//迭代器:集合特有的遍历方式Iterator<Student> it = array.iterator();while (it.hasNext()) {Student s = it.next();System.out.println(s.getName() + "," + s.getAge());}System.out.println("-------");//forfor (int i = 0; i < array.size(); i++) {Student s = array.get(i);System.out.println(s.getName() + "," + s.getAge());}System.out.println("---------");//增强forfor (Student s : array) {System.out.println(s.getName() + "," + s.getAge());}}
}

4.3LinkedList集合的特有功能

  • 特有方法
方法名 说明
public void addFirst(E e) 在该列表开头插入指定的元素
public void addLast(E e) 将指定的元素追加到此列表的末尾
public E getFirst() 返回此列表中的第一个元素
public E getLast() 返回此列表中的最后一个元素
public E removeFirst() 从此列表中删除并返回第一个元素
public E removeLast() 从此列表中删除并返回最后一个元素

Java基础day14相关推荐

  1. Java基础 Day14 泛型

    //为什么要使用泛型 //1.解决元素存储的安全性的问题 //2.解决获取元素时,须要类型转换的问题 //未使用泛型 package org.tizen.test;import java.util.A ...

  2. 小汤学编程之JAVA基础day14——xml和反射

    一.xml 1.简介     2.特点     3.使用步骤 二.Reflect反射 1.概念     2.理解Class类     3.反射的功能     4.两个案例 一.xml 1.简介 xml ...

  3. Java基础 DAY14

    package com.hspedu.smallchange;import java.text.SimpleDateFormat; import java.util.Date; import java ...

  4. java基础 day14数据安全,银行账户取款例子,synchronized()使用、面试题,死锁,线程安全

    数据安全 关于多线程并发环境下,数据的安全问题 为什么这个是重点?以后在开发中,我们的项目都是运行在服务器当中,而服务器已经将线程的定义,线程对象的创建,线程的启动等,都已经实现完了.这些代码我们都不 ...

  5. java基础--IO流之File类

    一.File类概述 用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作,File对象可以作为参数传递给流的构造函数 二.File类常见方法: 1,创建 boolean createN ...

  6. Java基础入门语法和安装

    1. Java概述 1.1 Java语言背景介绍(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Un ...

  7. Java笔记整理-02.Java基础语法

    1,标识符 由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A-Z)和小写字母(a-z),数字包含0到9. 标识符的第一个字符不能是数字(即标识符不能以数字开头). 标识符 ...

  8. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  9. Java基础概念性的知识总结

    属于个人的所学的知识总结,不是全面的 1.JDK.JRE和JVM三者的区别 01.JDK:(Java Development ToolKit)Java开发工具包,是整个Java的核心.包括了Java的 ...

最新文章

  1. CentOS 7 中 Systemd详解
  2. 用Windows Live Writer在51CTO写博客(2018年2月24日更新)
  3. 保护DNS对数字网络安全越来越重要—Vecloud
  4. linux 块设备驱动(二)——块设备数据结构
  5. 基础拾遗------webservice详解
  6. 协同过滤及大数据处理
  7. spark 学习总结
  8. pls-00302: 必须声明 组件_vue组件
  9. 你不知道的分布式锁+分布式事务面试题
  10. 无标度网络 matlab,无标度网络及MATLAB建模
  11. 两万字详解自动驾驶开发工具链的现状与趋势
  12. 实现生成木马的自动变异
  13. GPS设备获取的坐标转换成百度或者高德坐标
  14. 实现socket监听所有网络命名空间
  15. 达梦数据库授权到期替换key文件
  16. 智慧城市的背后是大数据的深度挖掘和利用
  17. 你问我答:U盘的CPU全部占满的处理办法——mfxp.com
  18. 新超重车辆高速动态称重系统设计方案
  19. 龙芯PMON(2K1000)启动流程(三、C语言部分①)
  20. keil 汉字区位码/内码读取错误解决方案

热门文章

  1. Git 将代码回到指定版本
  2. Xcode9学习笔记69 - 创建各种类型的文件(文本、数组、字典、图片)
  3. 将CAGradientLayer当做mask使用
  4. 实现类似微博、QQ空间等的动态加载
  5. 精品教程---Android应用程序框架
  6. 通常你会在什么地方遇到DBNull?
  7. 洛谷 P3865 【模板】ST表
  8. P2756 魔术球问题 (网络流)
  9. cuDNN version incompatibility: PyTorch was compiled against 7005 but linked against 6021 问题解决...
  10. 12 - 函数式编程