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基础教程视频学习笔记的更多相关文章

  1. 多线程--毕向东java基础教程视频学习笔记

    目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...

  2. 集合3--毕向东java基础教程视频学习笔记

    Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...

  3. 集合2--毕向东java基础教程视频学习笔记

    Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSe ...

  4. IO流05--毕向东JAVA基础教程视频学习笔记

    Day20 10 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 ...

  5. IO流01--毕向东JAVA基础教程视频学习笔记

    提要 01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBuffer ...

  6. 网络编程4--毕向东java基础教程视频学习笔记

    Day24 06 自定义浏览器-Tomcat服务端07 自定义图形界面浏览器-Tomcat服务端08 URL-URLConnection09 小知识点10 域名解析 06 自定义浏览器-Tomcat服 ...

  7. 网络编程3--毕向东java基础教程视频学习笔记

    Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...

  8. 网络编程2--毕向东java基础教程视频学习笔记

    Day 23 08 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端 需求:定义一个应用程序,用于接收 ...

  9. IO流04--毕向东JAVA基础教程视频学习笔记

    Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目 ...

随机推荐

  1. XMPP客户端开发(2)--发送接收消息

    客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat ch ...

  2. 泛函编程(31)-泛函IO:Free Monad-Running free

    在上节我们介绍了Free Monad的基本情况.可以说Free Monad又是一个以数据结构替换程序堆栈的实例.实际上Free Monad的功能绝对不止如此,以heap换stack必须成为Free M ...

  3. FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!

    一些struts2的教程都是比较早的,当我们基于较新版本的struts2来实现代码的时候,往往会出现一些问题.比如这个警告:FilterDispatcher isdeprecated! 在web.xm ...

  4. C# Winform反序列化复杂json字符串

    最近接的私单是一个CS项目,里面所有的操作都是通过调用API接口来进行的. 接口详细说明 协议:https  请求方式:post  https://xx.xxx.net/app/clients 提交j ...

  5. ReportingServies——SQLServer报表开发综合实例

    如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具 不要以为此报表开发工具只适合于sqlserver2008,其实在sqlserver2012中也是支持的,事实上我现在项目中 ...

  6. 使用loadrunner进行压力测试之----post请求

    1. 发送post请求时使用web_submit_data 如: web_submit_data("create",//事务名 "Action=http://bizhi. ...

  7. 在腾讯云上面搭建WordPress博客网站

    一.准备工作 我们使用腾讯云服务器来运行WordPress,腾讯云会给新用户七天的产品体验时间还有一些代金券,做为新手尝试成本是比较小的. 腾讯云长期举办 "云+校园" 活动,学生 ...

  8. According to TLD or attribute directive in tag file, attribute end does not accept any expressions

    问题描述: 在 JSP 页面中使用 JSTL 标签库,访问 JSP 页面时抛出了如下异常信息: org.apache.jasper.JasperException: /WEB-INF/manageUs ...

  9. Redis-复制

    Redis 的复制 (replication) 是一种使用和配置起来非常简单的主从(master-slave)复制,允许 Redis 从服务器成为主服务器的精确副本.以下是关于 Redis 复制的一些 ...

  10. PHP极客水平测试——给创业公司用的远程面试题

    出了份面试题<PHP极客水平测试>,创业公司可以用这个远程笔试啦,先答题,看答案合适了再邀请面试.希望对创业公司有所帮助,欢迎围观提建议哦^_^ 题目会持续更新. 答题地址:http:// ...