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. Java Collection或Map的同步

    新集合也提供了能防止多个进程同时修改一个容器内容的机制.若在一个容器里反复,同时另一些进程介入,并在那个容器中插入.删除或修改一个对象,便会面临发生冲突的危险.我们可能已传递了那个对象,可能它位于我们 ...

  2. WinForm 窗体应用程序 (初步)之二

    现在,我们来了解一些基本控件.控件是放置在工具箱里的,你可以在界面的左侧或者通过菜单栏的视图选项找到它. (1)Label 控件 这是一个用于放置文字的控件,因为你不能在窗体上直接输入文字. (2)T ...

  3. 解决Wireshark没有网卡问题

    wireshark在mac上使用没有网卡问题直接在终端输入命令:sudo chmod 644 /dev/bpf*

  4. JavaScript事件对象

    一. 事件对象 事件处理三部分组成:对象.事件处理函数=函数.例如:单击文档任意处. 1.鼠标按钮 非 IE(W3C)中的 button 属性 0 表示主鼠标按钮(常规一般是鼠标左键) 1 表示中间的 ...

  5. 一个类似backbone路由的纯净route ( 前端路由 客户端路由 backbone路由 )

    大家用backbone.angular,可能都习惯了内置的路由,这两个框架的路由都是非常优秀的,强大而简单. 客户端(浏览器)路由原理其实比较简单,其实就是监听hash的变化. 在之前的架构探讨中,说 ...

  6. Oracle12C相关

    1.jar包安装到MVN本地库 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1 ...

  7. python中的迭代与递归

    遇到一个情况,需要进行递归操作,但是呢递归次数非常大,有一万多次.先不说一万多次递归,原来的测试代码是java的,没装jdk和编译环境,还是用python吧 先看下原本的java代码: public ...

  8. DevExpress VCL 13.1.4支持Delphi /C++Builder XE5

    DevExpress VCL 13.1.4支持Delphi /C++Builder XE5 重大变化 ExpressLibrary dxHalfOfPi常数声明已经从cxGeometry单元移到了cx ...

  9. JSOM 对User的操作

    一.操作当前用户 //Load current user info function LoadCurUser() { var curUser; curUser = curWeb.get_current ...

  10. 折腾一天的WordPress

    自从昨天开始要写博客,在网上找了找大家都比较推崇著名的WordPress,所以自己就闲来无事要坐下测试弄一个,不弄不知道,一弄折磨人啊,公司的破网直接想让我崩溃,所以这一天就在这搭建环境中度过,不过值 ...