Java基础day14
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相关推荐
- Java基础 Day14 泛型
//为什么要使用泛型 //1.解决元素存储的安全性的问题 //2.解决获取元素时,须要类型转换的问题 //未使用泛型 package org.tizen.test;import java.util.A ...
- 小汤学编程之JAVA基础day14——xml和反射
一.xml 1.简介 2.特点 3.使用步骤 二.Reflect反射 1.概念 2.理解Class类 3.反射的功能 4.两个案例 一.xml 1.简介 xml ...
- Java基础 DAY14
package com.hspedu.smallchange;import java.text.SimpleDateFormat; import java.util.Date; import java ...
- java基础 day14数据安全,银行账户取款例子,synchronized()使用、面试题,死锁,线程安全
数据安全 关于多线程并发环境下,数据的安全问题 为什么这个是重点?以后在开发中,我们的项目都是运行在服务器当中,而服务器已经将线程的定义,线程对象的创建,线程的启动等,都已经实现完了.这些代码我们都不 ...
- java基础--IO流之File类
一.File类概述 用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作,File对象可以作为参数传递给流的构造函数 二.File类常见方法: 1,创建 boolean createN ...
- Java基础入门语法和安装
1. Java概述 1.1 Java语言背景介绍(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Un ...
- Java笔记整理-02.Java基础语法
1,标识符 由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A-Z)和小写字母(a-z),数字包含0到9. 标识符的第一个字符不能是数字(即标识符不能以数字开头). 标识符 ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...
- Java基础概念性的知识总结
属于个人的所学的知识总结,不是全面的 1.JDK.JRE和JVM三者的区别 01.JDK:(Java Development ToolKit)Java开发工具包,是整个Java的核心.包括了Java的 ...
最新文章
- CentOS 7 中 Systemd详解
- 用Windows Live Writer在51CTO写博客(2018年2月24日更新)
- 保护DNS对数字网络安全越来越重要—Vecloud
- linux 块设备驱动(二)——块设备数据结构
- 基础拾遗------webservice详解
- 协同过滤及大数据处理
- spark 学习总结
- pls-00302: 必须声明 组件_vue组件
- 你不知道的分布式锁+分布式事务面试题
- 无标度网络 matlab,无标度网络及MATLAB建模
- 两万字详解自动驾驶开发工具链的现状与趋势
- 实现生成木马的自动变异
- GPS设备获取的坐标转换成百度或者高德坐标
- 实现socket监听所有网络命名空间
- 达梦数据库授权到期替换key文件
- 智慧城市的背后是大数据的深度挖掘和利用
- 你问我答:U盘的CPU全部占满的处理办法——mfxp.com
- 新超重车辆高速动态称重系统设计方案
- 龙芯PMON(2K1000)启动流程(三、C语言部分①)
- keil 汉字区位码/内码读取错误解决方案
热门文章
- Git 将代码回到指定版本
- Xcode9学习笔记69 - 创建各种类型的文件(文本、数组、字典、图片)
- 将CAGradientLayer当做mask使用
- 实现类似微博、QQ空间等的动态加载
- 精品教程---Android应用程序框架
- 通常你会在什么地方遇到DBNull?
- 洛谷 P3865 【模板】ST表
- P2756 魔术球问题 (网络流)
- cuDNN version incompatibility: PyTorch was compiled against 7005 but linked against 6021 问题解决...
- 12 - 函数式编程