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. [Android] 环境配置之正式版Android Studio 1.0

    昨天看见 Android Studio 1.0 正式版本发布了:心里挺高兴的. 算是忠实用户了吧,从去年开发者大会一开始出现 AS 后就开始使用了:也是从那时开始就基本没有用过 Eclipse 了:一 ...

  2. Swift 自定义Subscript

    Swift可以方便给自定义类加下标,其中参数和返回值可以在类里定义为任意类型: subscript(parameters) -> ReturnType { get { //return some ...

  3. 半连通分量--Tarjan/Kosaraju算法

    一个有向图称为半连通(Semi-Connected),满足:对于图中任两点u,v,存在一条u到v的有向路径或者从v到u的有向路径. 若满足,则称G’是G的一个导出子图. 若G’是G的导出子图,且G’半 ...

  4. MySQL的安装与配置

    首先,到http://www.mysql.com/downloads/下载MySQL的安装文件mysql-installer,双击运行安装. 然后,配置环境变量,右键单击:我的电脑->高级-&g ...

  5. 一个十年java程序员的心得

    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...

  6. 【转】EL表达式 (详解)

    EL表达式      1.EL简介 1)语法结构        ${expression} 2)[]与.运算符      EL 提供.和[]两种运算符来存取数据.      当要存取的属性名称中包含一 ...

  7. Spring MVC静态资源处理(转)

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  8. [moka同学笔记]Yii下国家省市三级联动

    第一次做省市三级联动时候遇到了坑,感觉还是自己太菜.头疼了很久研究了很久,最后终于发现了问题.大致总结一下思路 在控制器中实例化model,然后在视图中渲染所有国家,当选取国家时候,ajax通过 id ...

  9. InfluxDB学习之InfluxDB的基本概念

    InfluxDB与传统数据库在概念上有许多的不同,本文就给大家介绍下InfluxDB中的一些基本概念,更多InfluxDB详细教程请看:InfluxDB系列学习教程目录 InfluxDB技术交流群:5 ...

  10. C++转换构造函数与类型转换构造函数

    转换构造函数: 转换构造函数的只有一个形参: Student(float s) { score = s; age = ; } 如果已经在上面定义了构造函数: Student(); //建立对象c1,由 ...