集合1--毕向东java基础教程视频学习笔记
Day14 集合框架
01 体系概述
02 共性方法
03 迭代器
04 List集合共性方法
05 ListIterator
06 List集合具体对象特点
07 Vector中的枚举
01 体系概述
集合类
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就需要对对象进行存储。
集合就是存储对象最常用的一种方式。
数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的,集合的长度是可变的。
数组中可以存储进本数据类型,集合只能存储对象。
集合类的特点:
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

02 共性方法
1.add方法的参数是object类型,以便与接受任意类型对象。
2.集合中存储的都是对象的引用(地址)。
import java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
method();
base_Method(); }
//求交集
public static void method()
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
sop("al原集合"+al); ArrayList al2=new ArrayList();
al2.add("java01");
al2.add("java07");
al2.add("java03");
al2.add("java08");
sop("al2原集合"+al2); al.retainAll(al2);
sop("al求交后的集合"+al); }
public static void base_Method()
{
//创建一个集合容器,使用Collection接口的子类,ArrayList
ArrayList al=new ArrayList(); //1.添加元素
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04"); //打印集合
sop("原集合:"+al);
//2.删除元素
al.remove("java02");
sop("改变后的集合:"+al);
//al.clear(); //4.判断元素
sop("java03是否存在"+al.contains("java03"));
sop("集合是否为空"+al.isEmpty()); //获取集合长度
sop("size:"+al.size());
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
03 迭代器
什么是迭代器?
其实就是集合中取出元素的方式。
把取出方式定义在集合的内部。
这样取出方式就可以直接访问集合内部的元素。
那么取出方式被定义为内部类。
每一个容器的数据结构不同,
取出的动作细节不一样,但都有共性的内容
判断和取出,那么可以将共性抽取。
这些内部类都符合一个规则。该规则是Iterator.
如何获取集合的取出对象呢?
通过一个对外提供的方法
iterator();
import java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
method(); }
//求交集
public static void method()
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04"); //获取迭代器,用于取出集合中的元素
/*Iterator it=al.iterator(); while(it.hasNext())
{
sop(it.next());
}
*/
for(Iterator it=al.iterator();it.hasNext();)
{
sop(it.next());
} } public static void sop(Object obj)
{
System.out.println(obj);
}
}
04 List集合共性方法
Collection
|--List:元素是有序的,元素可以重复。因为该集合有索引。
|--Set:元素是无序的,元素不可以重复。
List:
凡是可以操作角标的方法都是该体系的特有方法
增:add(index,element)
addAll(index,Collection)
删:remove(index)
改:set(index,element)
查:get(index)
subList(from,to)
listIterator();
import java.util.*;
class ListDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
sop("原集合:"+al); //在指定位置添加元素
al.add(1,"java09");
sop("改变后集合:"+al); //删除指定位置的元素
//al.remove(2); //修改元素
al.set(2,"java07");
//sop(al); //通过角标获取元素
sop("get(i)"+al.get(1)); //获取所有元素
for(int x=0;x<al.size();x++)
{
System.out.println("al("+x+")="+al.get(x));
} for(Iterator it=al.iterator();it.hasNext();)
{
sop("next:"+it.next());
} }
}
05 ListIterator
List集合特有的迭代器:ListIterator是Iterator的子接口。
在迭代时,不可以通过集合的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代时,只能用迭代器的方法操作元素,可是iterator方法是有限的
只能对元素进行判断,取出,删除
如果想要做其他的操作,如添加、修改等,就需要用到其子接口ListIterator
该接口只能通过List的ListIterator方法获取。
import java.util.*;
class ListDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
sop("原集合:"+al); ListIterator li=al.listIterator();
//在迭代过程中,操作元素
while(li.hasNext())
{
Object obj=li.next();
if(obj.equals("java02"))
li.set("java006");
}
sop("改变后集合:"+al); //逆序输出
while(li.hasPrevious())
{
sop("pre:"+li.previous()); }
sop(al); }
}
06 List集合具体对象特点
|--List:元素是有序的,元素可以重复。因为该集合有索引。
|--ArrayList:底层的数据结构使用的数组结构。特点:查询速度很快,但是增删稍慢,元素越多,这点体现越明显。线程不同步。
|--LinkedList:底层使用的是链表数据结构。 特点:增删快,查询速度很慢。
|--Vector:底层是数组数据结构。它比ArrayList先出现。 线程同步。被ArrayList代替了。
07 Vector中的枚举
/*
枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。 因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终。
*/
import java.util.*; class VectorDemo
{
public static void main(String[] args)
{
Vector v=new Vector(); v.add("java01");
v.add("java02");
v.add("java03");
v.add("java04"); Enumeration en=v.elements(); while(en.hasMoreElements())
{
System.out.println(en.nextElement());
} }
}
集合1--毕向东java基础教程视频学习笔记的更多相关文章
- 多线程--毕向东java基础教程视频学习笔记
目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...
- 集合3--毕向东java基础教程视频学习笔记
Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...
- 集合2--毕向东java基础教程视频学习笔记
Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSe ...
- IO流05--毕向东JAVA基础教程视频学习笔记
Day20 10 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 ...
- IO流01--毕向东JAVA基础教程视频学习笔记
提要 01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBuffer ...
- 网络编程4--毕向东java基础教程视频学习笔记
Day24 06 自定义浏览器-Tomcat服务端07 自定义图形界面浏览器-Tomcat服务端08 URL-URLConnection09 小知识点10 域名解析 06 自定义浏览器-Tomcat服 ...
- 网络编程3--毕向东java基础教程视频学习笔记
Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...
- 网络编程2--毕向东java基础教程视频学习笔记
Day 23 08 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端 需求:定义一个应用程序,用于接收 ...
- IO流04--毕向东JAVA基础教程视频学习笔记
Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目 ...
随机推荐
- 从头开始 启动开源电商项目jShop
1. 引言 干了三年C#, 有了转Java 的念想,所以尝试学习一下java web,java语法本身和C#没有太多的差别,所以打算看看开源的java项目,开源的Java项目还是非常非常多的,曾经看了 ...
- Android Volley框架的使用(1)
在Android开发中,经常要通过HTTP请求访问网络.为了使通过HTTP请求访问网络的过程更加简单,2013年提出了新的HTTP通信框架--Volley.Volley使用起来非常简单,适用于网络访问 ...
- JVM简介
关于java的JVM这块儿知识,在项目做大之后,一些性能的优化,要涉及到数据库,一些缓存要放在内存中.还有一些JMS的消息传播等等,高大上的知识需要有JVM内存模型知识的支持.所以自问自答,来回答下面 ...
- 初识React Native,踩坑之旅....
开启Genymotion Android模拟器后 1.运行“react-native run-android”报端口冲突....解决方法: 2.运行“react-native run-android” ...
- Struts1 中提交中文表单到ActionForm后出现乱码问题的原因及处理方法
问题: 在你所有页面设置的编码都是utf-8的情况下仍然会出现中文乱码现象. 一.乱码出现原因 由于Struts框架直接把表单数据发送给了ActionForm,所以这里面没有对HttpRequestS ...
- IO碰到的问题
1.流关了,并不代表流对象为空 可是java并没提供查看流是否关闭的方法 不过如果流已经关闭了以后,再对流进行操作的话,会抛出IOException:Stream closed异常 可以根据这个异常来 ...
- vsftp "上传 553 Could not create file"
我在LINUX下VSftp建立一个FTP服务器,但从WINDOWS使用FTP时,无法上传也无法下载!出错如下 ftp>; ls 200 PORT command successful. Cons ...
- css知多少(2)——学习css的思路
两周之前写过该系列的第一篇,其实当时只是一个想法,这段时间迟迟未更新,是在思考一个解决过程.现在初有成效,就开更吧. 1. 一个段子 开题不必太严肃,写博客也不像写书,像聊天似的写东西是最好的表达方式 ...
- C#如何根据配置实现动态窗体
本文主要讲述如何根据UI配置来动态生成控件, 并添加到窗体上来构建UI窗体,当用户在每个控件上完成输入操作后,程序通过遍历控件并用拼接字符串的方式动态生成Insert SQL语句,进而实现了将UI上的 ...
- mysql A表部分记录复制到B表
[不定时更新] 1.将一张表中部分记录的一或多个字段复制到另一张表中: 表A: 表B: 执行SQL: insert into B(f_userId,f_nickname) select f_telep ...