黑马学习笔记--集合初识
来源:互联网 发布:索多玛120天 知乎 编辑:程序博客网 时间:2024/06/05 22:35
对象数组
对象数组概述
- A:基本类型的数组:存储的元素为基本类型
int[] arr={1,2,3,4}
- B:对象数组:存储的元素为引用类型
Student[] stus=new Student[3];
案例
package com.itheima;/* * 创建一个学生数组,存储三个学生对象并遍历 * * 分析: * A:定义学生类 * B:创建学生数组 * C:创建学生对象 * D:把学生对象作为元素赋值给学生数组 * E:遍历学生数组 */public class StudentDemo { public static void main(String[] args) { //创建学生数组 Student[] students = new Student[3]; //创建学生对象 Student s1 = new Student("曹操",40); Student s2 = new Student("刘备",35); Student s3 = new Student("孙权",30); //把学生对象作为元素赋值给学生数组 students[0] = s1; students[1] = s2; students[2] = s3; //遍历学生数组 for(int x=0; x<students.length; x++) { Student s = students[x]; //System.out.println(s); System.out.println(s.getName()+"---"+s.getAge()); } }}
对象数组的内存图:
集合类
集合只能存引用数据类型,存储基本数据类型用的是自动拆箱
ArrayList
- 为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储, 就不能是一个基本的变量,而应该是一个容器类型的变量。
ArrayList添加新元素
package com.itheima_01;import java.util.ArrayList;/* * 为什么会出现集合类: * 我们学习的是面向对象编程语言,而面向对象编程语言对事物的描述都是通过对象来体现的。 * 为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储, * 就不能是一个基本的变量,而应该是一个容器类型的变量。 * 到目前为止,我们学习过了哪些容器类型的数据呢?StringBuilder,数组。 * StringBuilder的结果只能是一个字符串类型,不一定满足我们的需求。 * 所以,我们目前只能选择数组了,也就是我们前面学习过的对象数组。 * 但是,数组的长度是固定的,适应不了变化的需求,那么,我们该如何选择呢? * 这个时候,java就提供了集合类供我们使用。 * * 集合类的特点: * 长度可变。 * * ArrayList<E>: * 大小可变数组的实现 * * <E>:是一种特殊的数据类型,泛型。 * 怎么用呢? * 在出现E的地方我们使用引用数据类型替换即可 * 举例:ArrayList<String>,ArrayList<Student> * * 构造方法: * ArrayList() * * 添加元素: * public boolean add(E e):添加元素 * public void add(int index,E element):在指定的索引处添加一个元素 */public class ArrayListDemo { public static void main(String[] args) { //创建集合对象 ArrayList<String> array = new ArrayList<String>(); //add(E e):添加元素 array.add("hello"); array.add("world"); array.add("java"); //add(int index,E element):在指定的索引处添加一个元素 //array.add(1, "android"); System.out.println("array:"+array); }}
ArrayList删改查方法
- A:获取元素: public E get(int index):返回指定索引处的元素
- B:集合长度: public int size():返回集合中的元素的个数
- C:删除元素:
public boolean remove(Object o):删除指定的元素,返回删除是否成功.
public E remove(int index):删除指定索引处的元素,返回被删除的元素. - D:修改元素: public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
package com.itheima_01;import java.util.ArrayList;/* * 获取元素 * public E get(int index):返回指定索引处的元素 * 集合长度 * public int size():返回集合中的元素的个数 * 删除元素 * public boolean remove(Object o):删除指定的元素,返回删除是否成功 * public E remove(int index):删除指定索引处的元素,返回被删除的元素 * 修改元素n * public E set(int index,E element):修改指定索引处的元素,返回被修改的元素 */public class ArrayListDemo2 { public static void main(String[] args) { //创建集合对象 ArrayList<String> array = new ArrayList<String>(); //添加元素 array.add("hello"); array.add("world"); array.add("java"); //public E get(int index):返回指定索引处的元素 //System.out.println("get:"+array.get(0)); //System.out.println("get:"+array.get(1)); //System.out.println("get:"+array.get(2)); //public int size():返回集合中的元素的个数 //System.out.println("size:"+array.size()); //public boolean remove(Object o):删除指定的元素,返回删除是否成功 //System.out.println("remove:"+array.remove("world"));//true //System.out.println("remove:"+array.remove("world"));//false //public E remove(int index):删除指定索引处的元素,返回被删除的元素 //System.out.println("remove:"+array.remove(0)); //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素 System.out.println("set:"+array.set(1, "android")); //输出 System.out.println("array:"+array); }}
ArrayList遍历
集合的遍历思想和数组的遍历思想相同,循环遍历容器,依次取出里面的元素即可.
public class ArrayListTest { public static void main(String[] args) { //创建集合对象 ArrayList<String> array = new ArrayList<String>(); //添加字符串元素 array.add("向问天"); array.add("刘正风"); array.add("左冷禅"); array.add("风清扬"); //遍历集合 for(int x=0; x<array.size(); x++) { String s = array.get(x); System.out.println(s); } }}
迭代器
hasNext()方法:用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。
next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
import java.util.ArrayList;import java.util.Iterator;/* * 在java当中不止ArrayList一个集合,java提供了众多的集合. * * 不同的容器完成不同方式的数据存储. * 不同集合的特点不同,ArrayList有序且可重复且带索引的集合.但是有的集合不带索引.所以如果使用其他集合,可能无法通过get+索引的方式获取元素 * * 所有集合的通用获取元素方法并不是通过索引获取,而是通过迭代器获取. * 迭代器:iterator */public class Demo02iterator { public static void main(String[] args) { //创建集合对象 ArrayList<Integer> list = new ArrayList<Integer>(); //向集合中添加元素 list.add(10); list.add(100); list.add(2000); //获取该集合的迭代器 Iterator<Integer> iterator = list.iterator(); //使用迭代器的方法,迭代集合(遍历集合) while(iterator.hasNext()) { //获取集合中元素 Integer thisNumber = iterator.next(); System.out.println(thisNumber); } }}
原理
import java.util.ArrayList;import java.util.Iterator;/* * 集合用来持有数据,所有常用集合都具备了可迭代功能iterator方法,该方法用于迭代集合,该方法才是最为通用的集合迭代方法。 * * 迭代器:集合迭代(集合遍历)的工具 * * 集合的获取迭代器方法 * public Iterator<E> iterator() 获取某个集合的迭代器实例对象 * * Iterator:迭代器接口 * boolean hasNext() 判断集合中是否有下一个元素 不移动元素指针 * E next() 获取集合中下一个元素 移动指针,指向下一个元素 */public class Demo03iterator { public static void main(String[] args) { //创建集合对象 ArrayList<Integer> list = new ArrayList<Integer>(); //向集合中添加元素 list.add(10); list.add(100); list.add(2000); //调用集合的iterator方法,返回迭代器对象 Iterator<Integer> itr = list.iterator(); //混合使用hasNext与next方法,循环获取元素 while(itr.hasNext()) { //如果有元素,就获取元素 Integer thisNumber = itr.next(); System.out.println(thisNumber); } }}
并发修改异常
java.util.ConcurrentModificationException:在前一个迭代器迭代自定义数据类型的基础上,添加新的需求
- 在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器并不知道集合中的变化,容易引发数据的不确定性。
解决并发修改异常,重新获取迭代器
public class Demo05ConcurrentModificationException { public static void main(String[] args) { //创建集合对象 ArrayList<Person> list = new ArrayList<Person>(); //向集合中添加元素 Person p = new Person("Jack",18); Person p2 = new Person("Rose",16); Person p3 = new Person("Trump",62); Person p4 = new Person("Obama",56); Person p5 = new Person("Castro",90); list.add(p); list.add(p2); list.add(p3); list.add(p4); //调用集合的iterator方法,返回迭代器对象 Iterator<Person> itr = list.iterator(); //混合使用hasNext与next方法,循环获取元素 while(itr.hasNext()) { //如果有元素,就获取元素 Person thisP = itr.next(); //判断年龄是否为16岁 if(thisP.getAge() == 16) { //如果存在16岁的人,就加入90岁的卡斯特罗 list.add(p5); } } }}
增强for循环
for(元素的数据类型 变量 : Collection集合or数组){}
0 0
- 黑马学习笔记--集合初识
- 黑马程序员-----初识集合
- 黑马学习笔记_集合
- 黑马程序员-学习笔记-集合
- 黑马程序员学习笔记五 初识异常
- 黑马程序员---Map集合 学习笔记
- java学习笔记-集合框架-黑马
- 黑马程序员_java集合学习笔记
- 黑马程序员-java集合 学习笔记
- 黑马程序员java学习笔记,集合
- 黑马程序员-java基础-集合学习笔记
- 黑马程序员------java学习笔记之集合
- 黑马程序员_Set集合学习笔记
- 黑马程序员_ArrayList集合学习笔记
- 黑马程序员_Map集合学习笔记
- 黑马程序员 集合学习笔记三
- 黑马程序员 集合学习笔记二
- 黑马程序员 集合学习笔记一
- spring 配置文件属性命名注意点
- TXT数据转OpenCV中的Mat数据
- Oracle VM VirtualBox安装增强功能和共享文件夹的方法
- HDOJ 1827 Summer Holiday
- 程序员究竟该如何提高效率
- 黑马学习笔记--集合初识
- 【shell】文本处理的一些小技巧
- StringBuffer和StringBuilder和String比较
- 同伙过去口试激发我要说的一个小话题
- html表单验证
- LeetCode:Ugly Number
- "尚学堂杯"哈尔滨理工大学第七届程序设计竞赛——Hrbust2326 Blind Father
- cookie基础
- 如何实现按两次退出的效果