Java基础_15集合及其方法

今天的内容

1.集合

1.集合【重点】

1.1为什么使用集合

集合和数组是一样的都是用来存储数据的!!!

真实的开发的时候,使用的是集合不是数组,为啥?

数组存数据:

​ 1.数组的容量是固定的

​ 2.数组封装的方法是比较少的。大部分需要程序员需要自己写

Java封装了集合,是一些类。咱们只需要实例化对象,调用方法即可完成一些需求。

1.2集合的架构

官方的API

interface  Collection<E>:  Java 集合的总接口。
Collection接口下面有两个重要的子接口:   List 和Set
--| List:   接口  有序集合(也称为序列 )   特征:  存放放的数据是有序的。可以重复的。
--|--|  ArrayList:  实现类,重写List和COllection所有的抽象方法。并且还有自己独有的方法
--|--|  LInkedList:  实现类,重写List和COllection所有的抽象方法。并且还有自己独有的方法
--| Set:    接口        特征:  存放放的数据是无序的。不可以重复的。   
--|--|  HashSet:  实现类,重写Set和COllection所有的抽象方法。并且还有自己独有的方法
--|--|  TreeSet:  实现类,重写Set和COllection所有的抽象方法。并且还有自己独有的方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.3Collection接口

学习Collection就是学习这个接口下面的方法,对象调用方法。他是接口,无法进行实例化啊

咋办?自己写一个类去实现Collection

增:boolean add(E e);添加数据到集合中boolean addAll(Collection<? extends E> c);将一个集合添加另外一个集合
删:boolean remove(Object obj);//通过元素来删除集合中的元素boolean removeAll(Collection<? extends E> c);删除两个集合中的交集。共同的元素void clear();  清空
查:int size(); 获取集合中的元素的个数boolean contains(Object o);判断集合中是否包含一个元素boolean isEmpty();判断是否为空。为空就是true。不为空就是falseObject[] toArray();将集合转为数组。
package com.qf.a_collection;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/public class Demo1 {public  static void main(String[] args) {//Java中封装的有实现类  ArrayListCollection<String> collection = new ArrayList<>();//但是 只能使子类重写父类的那个方法,子类独有的方法不能使用!!System.out.println(collection);//[]collection.add("狗蛋");collection.add("吴彦祖");collection.add("狗蛋");collection.add("闫世达");System.out.println(collection);//[狗蛋, 吴彦祖, 闫世达]Collection<String> collection1 = new ArrayList<>();collection1.add("嘻嘻");collection1.add("哈哈");collection.addAll(collection1);//将collection1数据存到collectionSystem.out.println(collection);//[狗蛋, 吴彦祖, 闫世达, 嘻嘻, 哈哈]Collection<Integer> collection2 = new ArrayList<>();collection2.add(21);collection2.add(22);collection2.add(23);//collection.addAll(collection2);System.out.println(collection.remove("闫世达"));System.out.println(collection);//被删除以后的集合的数据System.out.println(collection.remove("闫世达"));//如被删除的元素如果没有话的,就是falsecollection.remove("狗蛋");System.out.println(collection);//[吴彦祖, 狗蛋, 嘻嘻, 哈哈]Collection<String> collection3 = new ArrayList<>();collection3.add("嘻嘻");collection3.add("呵呵");collection3.add("哈哈");collection.removeAll(collection3);System.out.println(collection);//[吴彦祖, 狗蛋]
//        collection.clear();
//        System.out.println(collection);//[]System.out.println(collection.size());//2System.out.println(collection.contains("狗蛋"));//trueSystem.out.println(collection.isEmpty());//false 因为不为空Object[] objects = collection.toArray();for (int i = 0; i < objects.length; i++) {System.out.println(objects[i]);}}
}
1.4遍历数据
三种遍历方式:
1.使用for循环进行遍历
2.使用增强for循环遍历
3.使用迭代器进行遍历
1.4.1使用for循环进行遍历
package com.qf.a_collection;import java.util.ArrayList;
import java.util.Collection;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo2 {public static void main(String[] args) {Collection<Boolean> col = new ArrayList<>();col.add(true);col.add(false);col.add(true);col.add(true);System.out.println(col);Object[] objects = col.toArray();for (int i = 0; i < objects.length; i++) {System.out.println(objects[i]);}}
}
1.4.2增强for循环

语法格式:

for (类型  临时变量: 遍历的数组或者集合) {sout(临时变量)
}
package com.qf.a_collection;import java.util.ArrayList;
import java.util.Collection;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo3 {public static void main(String[] args) {Collection<Boolean> col = new ArrayList<>();col.add(true);col.add(false);col.add(true);col.add(true);System.out.println(col);//直接写代码 iterfor (Boolean aBoolean : col) {System.out.println(aBoolean);}}
}
1.4.3迭代器

也是用来遍历数据的。

package com.qf.a_collection;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo4 {public static void main(String[] args) {Collection<String> collection1 = new ArrayList<>();collection1.add("嘻嘻");collection1.add("呵呵");collection1.add("哈哈");//1.先将集合变成迭代器对象Iterator<String> iterator = collection1.iterator();//iterator 这个里面还是有数据的!!!//boolean	hasNext()//如果迭代具有更多元素,则返回 true 。//System.out.println(iterator.hasNext());//true//E next()//返回迭代中的下一个元素。并将光标挪到当前元素上面//   [嘻嘻, 呵呵, 哈哈]//                  |
//        System.out.println(iterator.next());//嘻嘻
//        System.out.println(iterator.hasNext());//true
//        System.out.println(iterator.next());//呵呵
//        System.out.println(iterator.hasNext());//true
//        System.out.println(iterator.next());//哈哈
//        System.out.println(iterator.hasNext());//false// System.out.println(iterator.next());while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

总结迭代器遍历数据

1.先把集合变成迭代器对象
2.通过while循环   hasNext方法  next()

上午讲的内容

1.集合的架构Collection  父接口ListArrayList  实现类LinkedList 实现类SetHashSetTreeSet
2.Collection下面的方法addaddAllremoveclearsizeconatinstoArrayisEmpty
3.遍历集合中数据1.for循环2.增强for循环3.迭代器
1.5集合中存对象【重点】

集合中存 八大基本数据类型,只能写包装类。String, 可以存自定义的对象

package com.qf.a_collection;import java.util.ArrayList;
import java.util.Collection;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
class Person {String name;int age;public Person (String name, int age) {this.name = name;this.age = age;}}public class Demo5 {public static void main(String[] args) {Collection<Person> collection = new ArrayList<>();collection.add(new Person("吕布", 21));collection.add(new Person("曹操", 28));collection.add(new Person("董卓", 58));System.out.println(collection);//可以存对象的//将数据遍历出来for (Person person : collection) {System.out.println(person.name + ":" + person.age);System.out.println("==========");}}
}

练习:

一个集合中存的是Student对象name  age 私有话。遍历 将name和age取出来
package com.qf.a_collection;import java.util.ArrayList;
import java.util.Collection;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
class Student {private String name;private int age;//对属性进行赋值public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}
}
public class Demo6 {public static void main(String[] args) {Collection<Student> stus = new ArrayList<>();stus.add(new Student("狗蛋", 21));stus.add(new Student("永杰", 25));stus.add(new Student("世奇", 83));System.out.println(stus);for (Student student : stus) {System.out.println(student.getName());System.out.println(student.getAge());}}
}
1.6List集合

开发中不用Collection 一般用List。

List是一个接口,是Collection的子接口。

Collection 咱们学过方法,List接口能不能用COllection方法 为啥? 继承关系

List接口下面比Collection接口下面的方法更多!!!

讲List下面的方法,只讲List独有的。

特征 List: 存的数据是有序的,可以重复的

Collection中的方法,List肯定是有点,是继承关系,上午讲的COllection下面的方法 在List照样能用
只讲List独有方法
增:void  add(int index, E e);在指定的下标的位置添加指定的元素boolean addAll(int index, Collection<? extends E> c);在指定的下标下面添加指定的集合
删:Collection下面remove  是通过元素删除的E remove(int index); 通过下标来删除元素,返回值 是被删除的那个元素
改:E  set(int index, E element);通过指定的索引下标替换某一个元素。返回值是被替换的元素
查:E get(int index); 通过下标获取指定的元素int  indexOf(Object o);获取指定元素的下标int lastIndexOf(Object o);获取指定元素的最后一次出现下标的List<E> subList(int fromIndex, int toIndex); 截取一个集合
package com.qf.b_list;import java.util.ArrayList;
import java.util.List;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo1 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("安徽板面加狮子头");list.add("北京烤手机");list.add("烧饼加馍馍");System.out.println(list);list.add(1, "胡辣汤");list.add("北京烤手机");System.out.println(list);List<String> list1 = new ArrayList<>();list1.add("烤肠");list1.add("大肠赤身");list1.add("蜂蜜灌大肠");list.addAll(2, list1);System.out.println(list);//[安徽板面加狮子头, 胡辣汤, 烤肠, 大肠赤身, 蜂蜜灌大肠, 北京烤手机, 烧饼加馍馍]System.out.println(list.remove(1));//删除的数据  胡辣汤System.out.println(list);//被删除之后的数据  [安徽板面加狮子头, 烤肠, 大肠赤身, 蜂蜜灌大肠, 北京烤手机, 烧饼加馍馍]System.out.println(list.set(0, "兰州拉面"));System.out.println(list);//[兰州拉面, 烤肠, 大肠赤身, 蜂蜜灌大肠, 北京烤手机, 烧饼加馍馍]System.out.println(list.get(3));System.out.println(list.indexOf("烤肠"));//1System.out.println(list.lastIndexOf("北京烤手机"));//6List<String> strings = list.subList(2, 4);//要头不要尾System.out.println(strings);}
}

Collection 和List 我讲的都要记,明天默写!!!

1.7List的三种遍历方式
1.for循环
2.增强for循环
3.迭代器
1.7.1for循环和增强for循环
package com.qf.b_list;import java.util.ArrayList;
import java.util.List;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo2 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("安徽板面加狮子头");list.add("北京烤手机");list.add("烧饼加馍馍");System.out.println(list);//[安徽板面加狮子头, 北京烤手机, 烧饼加馍馍]for (int i = 0; i < list.size(); i++) {//刚好通过get方法的遍历的System.out.println(list.get(i));}System.out.println("===========");for (String s : list) {System.out.println(s);}System.out.println("---------");}
}
1.7.2迭代器
package com.qf.b_list;import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo3 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("安徽板面加狮子头");list.add("北京烤手机");list.add("烧饼加馍馍");System.out.println(list);//[安徽板面加狮子头, 北京烤手机, 烧饼加馍馍]ListIterator<String> sli = list.listIterator();while (sli.hasNext()) {System.out.println(sli.next());}System.out.println("========");//到此位置 光标在最后while (sli.hasPrevious()) {System.out.println(sli.previousIndex());System.out.println(sli.previous());}}
}
package com.qf.b_list;import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo4 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("安徽板面加狮子头");list.add("北京烤手机");list.add("烧饼加馍馍");ListIterator<String> stringListIterator = list.listIterator(list.size());while (stringListIterator.hasPrevious()) {System.out.println(stringListIterator.previous());}}
}
1.8ArrayList类

从开发角度来讲

package com.qf.c_arrayList;import java.util.*;
import java.util.List;/*** description:* 公司:千锋教育* author:博哥* 公众号:Java架构栈*/
public class Demo1 {public static void main(String[] args) {List<String> list1 = new ArrayList<>();list1.add("狗蛋");list1.add("嘻嘻");list1.add("啊哈哈");//增删改查 的方法即可}
}

ArrayList的底层是数组Object[]。 默认的容量是10。如果超过10会自动扩容

一旦超过10扩容是原来的1.5倍

https://blog.csdn.net/kevinmeanscool/article/details/122116738
源码:

    /*** Default initial capacity.*/private static final int DEFAULT_CAPACITY = 10;可以看出来  ArrayList 底层是数组/*** The array buffer into which the elements of the ArrayList are stored.* The capacity of the ArrayList is the length of this array buffer. Any* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA* will be expanded to DEFAULT_CAPACITY when the first element is added.存储ArrayList元素的数组缓冲区。ArrayList的容量就是这个数组缓冲区的长度。添加第一个元素时,任何elementData==DEFAULTCAPACITY_empty_elementData的空ArrayList都将扩展为DEFAULT_CAPACITY。 默认容量是10*/transient Object[] elementData; // non-private to simplify nested class access核心的add方法/*** Appends the specified element to the end of this list.*将指定的元素追加到此列表的末尾。* @param e element to be appended to this list* @return <tt>true</tt> (as specified by {@link Collection#add})*/public boolean add(E e) {//确保内部容量一个方法ensureCapacityInternal(size + 1);  // Increments modCount!!elementData[size++] = e;return true;}private void ensureCapacityInternal(int minCapacity) {ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));}//确保显示容量的方法private void ensureExplicitCapacity(int minCapacity) {modCount++;// overflow-conscious code  //minCapacity 最小的容量//elementData.length  elementData元素的长度if (minCapacity - elementData.length > 0)grow(minCapacity);}private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;//数组的长度//>>      :     右移运算符,num >> 1,相当于num除以2// int newCapacity = oldCapacity + oldCapacity / 2;   1.5倍数int newCapacity = oldCapacity + (oldCapacity >> 1);//newCapacity  新的数组容量if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:// Arrays.copyOf  数组的复制  把一个数组的内容复制到另外一个数组//elementData  原来的数组的内容//[1,2,3,4,5,6,7,8,9,0]//[1,2,3,4,5,7,6,8,9,0,0,0,0,0,0]//add(98)//[1,2,3,4,5,7,6,8,9,0,98,0,0,0,0]elementData = Arrays.copyOf(elementData, newCapacity);}

作业:

1.Collection下面的方法
2.List接口下面方法
3.遍历的方式
4.ArrayList源码

1);

    //newCapacity  新的数组容量if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:// Arrays.copyOf  数组的复制  把一个数组的内容复制到另外一个数组//elementData  原来的数组的内容//[1,2,3,4,5,6,7,8,9,0]//[1,2,3,4,5,7,6,8,9,0,0,0,0,0,0]//add(98)//[1,2,3,4,5,7,6,8,9,0,98,0,0,0,0]elementData = Arrays.copyOf(elementData, newCapacity);
}

练习:

1.Collection下面的方法
2.List接口下面方法
3.遍历的方式
4.ArrayList源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

慢品人间烟火色,闲观万事岁月长

小女孩的衣柜里&#xff0c;怎能缺少一套别致的新中式穿搭&#xff1f;让我们的小公主在时尚与传统中寻找平衡 演绎属于自己的中国风魅力精致的小立领&#xff0c;淡淡的文艺复古气息 上衣系带设计&#xff0c;外加一层高透轻纱穿上身如亭亭玉立的大小姐整个人仿佛笼罩了一层…

【docker】之linux写shell脚本备份线上数据库(备份为dump文件)

目录 1. SH文件1.1 SH文件示例1.2 文件解释1.3 .sh文件执行 2. 备份线上数据库的.sh文件2.1 文件命令解析 3. 命令执行4. 线下dump文件的恢复与备份 环境&#xff1a;linux容器&#xff1a;docker 1. SH文件 SH文件通常指的是 Shell 脚本文件&#xff0c;文件后缀名为.sh&…

IP查询在追踪网络攻击源头中的应用

随着网络攻击事件的不断增加&#xff0c;追踪攻击源头成为网络安全领域的重要任务之一。IP查询技术通过分析网络流量中的IP地址&#xff0c;可以帮助确定攻击的来源。本文将探讨IP查询在追踪网络攻击源头中的应用&#xff0c;包括其原理、方法以及实际案例分析。 IP地址查询&a…

比特币减半后 牛市爆发

作者&#xff1a;Arthur Hayes of Co-Founder of 100x 编译&#xff1a;Qin jin of ccvalue (以下内容仅代表作者个人观点&#xff0c;不应作为投资决策依据&#xff0c;也不应被视为参与投资交易的建议或意见&#xff09;。 Ping PingPing&#xff0c;我的手机发出的声音&…

Linux CentOS 安装 MySQL 服务教程

Linux CentOS 安装 MySQL 服务教程 1. 查看系统和GNU C库(glibc)版本信息 1.1 查询机器 glibc 版本信息 glibc&#xff0c;全名GNU C Library&#xff0c;是大多数Linux发行版中使用的C库&#xff0c;为系统和应用程序提供核心的API接口。在Linux系统中&#xff0c;特别是在…

js 数组 按列循环二维数组

期待效果&#xff1a; 核心代码&#xff1a; //js function handle(array) {var result [];for (let i 0; i < array[0].length; i) {var item []; for (let j 0; j < array.length; j) {item.push(array[j][i])} result.push(item);} return result; } 运行代码&a…

酷开科技 | 酷开系统打破客厅局限让大家享受更智能便捷的服务

曾经电视是家庭场景中的重要屏幕&#xff0c;是家庭发现世界和获取资讯的中心。但经历了近一百年的发展&#xff0c;传统电视行业进入瓶颈期&#xff0c;电视在家庭中的地位被逐渐替代。特别是智能手机的诞生&#xff0c;让手机成为个人生活的中心和全社会关注焦点&#xff0c;…

STM32F7 MPU Cache的原理和一致性问题

目录 概述 1 Cache 及其原理 2 结构及策略 2.1 Cache类型 2.2 Cache实例 3 Cache 及 MPU 属性 4 Cache 一致性问题 4.1 未Clean写Cache情况 4.2 DMA 更新物理内存情况 4.3 一个实例 4.3.1 功能描述 4.3.2 代码实现 4.3.3 结论 概述 本文主要从结构原理以及应用方…

接口自动化测试(python+pytest+requests)

一、选取自动化测试用例 优先级高:先实现业务流程用例、后实现单接口用例功能较稳定的接口优先开展测试用例脚本的实现二、搭建自动化测试环境 核心技术:编程语言:python;测试框架:pytest;接口请求:requests安装/验证requests:命令行终端分别输入 pip install requests / p…

助力低碳出行 | 基于ACM32 MCU的电动滑板车方案

随着智能科技的快速发展&#xff0c;电动滑板车的驱动系统也得到了长足的发展。国内外的电动滑板车用电机驱动系统分为传统刷式电机和无刷电机两种类型。其中&#xff0c;传统的刷式电机已经逐渐被无刷电机所取代&#xff0c;无刷电机的性能和寿命都更出色&#xff0c;已成为电…

蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示

综合查阅了网络上目前能找到的所有关于此技能的代码&#xff0c;最终找到了下述方式比较可靠&#xff0c;且可以自定义任意显示的数值。 传统采用延时函数的方式实现动态数码管扫描&#xff0c;在题目变复杂时效果总是会不佳&#xff0c;因此在省赛中有必要尝试采用定时计数器中…

HCIP课后习题之一

1、路由协议用工作机制上分为那几种&#xff1f;分别是&#xff1f; A&#xff1a;两种。分别是静态路由和动态路由&#xff08;可分为IGP和EGP&#xff09; 2、IGP和EGP协议有哪些&#xff1f; A&#xff1a;IGP: RIP、OSPF、ISIS、EIGRP EGP: BGP 3、路由优先级的用途&…

嵌入式学习52-ARM1

知识零散&#xff1a; 1.flash&#xff1a; nor flash 可被寻地址 …

如何设置端口映射?

端口映射是一种网络技术&#xff0c;通过在网络路由器或防火墙上设置规则&#xff0c;将外部网络请求转发到内部特定设备或服务的端口上。这样可以实现不同地区电脑与电脑、设备与设备、电脑与设备之间的信息远程通信&#xff0c;提供更加便捷的网络连接。 2. 天联组网 天联是…

Day:005 | Python爬虫:高效数据抓取的编程技术(爬虫效率)

爬虫之多线程-了解 单线程爬虫的问题 因为爬虫多为IO密集型的程序&#xff0c;而IO处理速度并不是很快&#xff0c;因此速度不会太快如果IO卡顿&#xff0c;直接影响速度 解决方案 考虑使用多线程、多进程 原理&#xff1a; 爬虫使用多线程来处理网络请求&#xff0c;使用线程…

废品回收 小程序+APP

用户实名认证、回收员实名认证、后台审核、会员管理、回收员管理、订单管理、提现管理、地图、档案管理。 支持&#xff0c;安卓APP、苹果APP、小程序 流程&#xff1a; 一、用户端下单&#xff0c;地图选择上门位置、填写具体位置、废品名称、预估重量、选择是企业废旧、家…

MySQL - 掌握MySQL锁的必备知识

1. 多个事务更新同一行数据时是如何加锁避免脏写? 当有多个事务同时并发更新一行数据的时候,不就是会有脏写的问题吗?那么脏写是靠什么防止的呢? 其实就是靠锁机制,依靠锁机制让多个事务更新一行数据的时候串行化,避免同时更新一行数据。 在MySQL里,假设有一行数据摆…

基于JAVA的校园失物招领平台

采用技术 基于JAVA的校园失物招领平台的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员功能 论坛管理 失物认领管理 寻物启事管理 用户管理 失物…

neo4j-01

Neo4j是&#xff1a; 开源的&#xff08;社区版开源免费&#xff09;无模式&#xff08;不用预设数据的格式&#xff0c;数据更加灵活&#xff09;noSQL&#xff08;非关系型数据库&#xff0c;数据更易拓展&#xff09;图数据库&#xff08;使用图这种数据结构作为数据存储方…

基于java的某超市进销存管理系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…