1、对象数组(掌握)

  (1)数组既可以存储基本数据类型,也可以存储引用类型。它存储引用类型的时候的数组就叫对象数组。

  (2)案例:

    用数组存储5个学生对象,并遍历数组。(这里添加)

 package day02;

 /**
* @author WYH
* @version 2019年11月12日 下午10:28:33
*/
public class test {
public static void main(String[] args) {
Students[] s = new Students[5]; Students s1 = new Students("xiao",21);
Students s2 = new Students("da",22); s[0] = s1;
s[1] = s2; for(int i = 0;i<s.length;i++) {
System.out.println(s[i]);
} } }

2、集合(Collection)(掌握)

  (1)集合的由来?

    我们学习的时Java -- 面向对象 --操作很多对象 --存储 -- 容器(数组和StringBuffer)-- 数组而数组得长度固定,所以不适合做变化得需求,Java就提供了集合供我们使用。

  (2)集合和数组得区别?

    A: 长度区别

      数组固定

      集合可变

    B: 内容区别

      数组可以是基本类型,也可以是引用类型

      集合只能是引用类型

    C: 元素内容

      数组只能存储同一种类型

      集合可以存储不同类型(其实集合一般存储得也是同一种类型)

  (3)集合的继承体系结构?

      由于需求不同,Java就提供了不同得集合类,而这多个集合类得数据结构不同,但是他们都是要提供存储和遍历功能得容器,我们把他们得共性不断向上提取,

最终就形成了集合得继承体系结构。

  Collection

    |--List

      |--ArrayList

      |--Vector

      |--LinkList

    |--Set

      |--HashSet

      |--TreeSet

  (4)Collection得功能概述(自己查询API文档)

    A: 添加功能

    B:删除功能

    C: 判断功能

    D: 获取功能

    E: 长度功能

    F: 交集(了解)

    G: 把集合转数组(了解)

  (5)Collection集合得遍历

    A: 把集合转数组(了解)

 package javaclassset;

 import java.util.ArrayList;
import java.util.Collection; public class CollectionDemo3 { public static void main(String[] args) {
Collection c1 = new ArrayList(); c1.add("Hello"); //Object obj = "Hello";
c1.add("world");
c1.add("java"); Object[] obj = c1.toArray(); for(int i = 0;i<obj.length;i++) {
String s = (String)obj[i];
System.out.println(s);
} } }

    B: 迭代器(集合专用方式)

 package javaclassset;

 import java.util.ArrayList;

 import java.util.Collection;
import java.util.Iterator; public class CollectionDemo3 { public static void main(String[] args) {
Collection c1 = new ArrayList(); c1.add("Hello"); //Object obj = "Hello";
c1.add("world");
c1.add("java"); //转数组for循环遍历
Object[] obj = c1.toArray(); for(int i = 0;i<obj.length;i++) {
String s = (String)obj[i];
System.out.println(s);
} //迭代器遍历
Iterator it = c1.iterator(); while(it.hasNext()) {
System.out.println(it.next());
}
} }

       (6)迭代器

    A: 是集合得获取元素得方式

    B: 是依赖于集合而存在得

    C:迭代器得原理和源码

      a:为什么定义为了一个接口而不是一个实现类(如果是实现类,那么就要提供具体得实现方法,但是我们的集合有很多种,所以是一个接口)

      b: 看了看迭代器的内部类实现

  (7)Collecton集合的案例(遍历方式 迭代器)

    集合的操作步骤:

      A: 创建集合对象

      B: 创建元素对象

      C: 把元素添加带集合

      D: 遍历集合

    A: 存储字符串并遍历

 package com.wyh.Iterator;

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class IteratorDemo1 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("Hello");
c.add("World");
c.add("java"); Iterator it = c.iterator(); while(it.hasNext()) {
System.out.println(it.next());
} } }

    B: 存储自定义对象并遍历(Student类自己写,这个不难)  

 package javaclassset;

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; import com.wyh.Iterator.Student; public class ColletionStudentDemo { public static void main(String[] args) { Collection c = new ArrayList(); Student s1 = new Student("王友虎",22);
Student s2 = new Student("李宏灿",21);
Student s3 = new Student("赵以浩",23);
Student s4 = new Student("李先锋",24);
Student s5 = new Student("齐博源",25); c.add(s1);
c.add(s2);
c.add(s3);
c.add(s4);
c.add(s5); //转数组for循环遍历
Object[] objs = c.toArray();
for(int i = 0;i<objs.length;i++) { Student s = (Student) objs[i];
System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge());
} //迭代器遍历
Iterator it = c.iterator();
while(it.hasNext()) {
Student s = (Student)it.next();
System.out.println(s.getName()+"-----"+s.getAge());
} } }

3、集合(List)(掌握)

  (1)List是Collection的子接口

    特点:有序(存储顺序和取出顺序一致),可重复。

  (2)List的特有功能:(下面的程序中有,自己拷贝进行实验)

    A: 添加功能

    B: 删除功能

    C: 获取功能

    D: 迭代器功能

    E: 修改功能

  (3)List集合的特有遍历功能

    A: 由size()和get()结合。

    B: 代码演示

 package com.wyh.Iterator;

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; /**
* @author WYH
* @version 2019年11月9日 下午4:39:09
*
* List:
* 有序集合(也称为序列(“存储与取出的顺序一致”) )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
* 与集合不同,列表通常允许重复的元素。
* 更正式地,列表通常允许元素e1和e2成对使得e1.equals(e2) ,并且如果它们允许空元素,它们通常允许多个空元素。
* 有人可能希望实现一个禁止重复的列表,当用户尝试插入时会抛出运行时异常,但是我们预计这种使用是罕见的。
*/
public class ListDemo1 { static void show(List list) {
Iterator it = list.iterator();
while(it.hasNext()) {
String s = (String)it.next();
System.out.println(s);
}
} public static void main(String[] args) {
//创建List集合
List l1 = new ArrayList(); //创建字符串对象并进行添加
l1.add("a");
l1.add("b"); System.out.println("add(int index, E element):**********************************"); //add(int index, E element):将指定的元素插入此列表中的指定位置(可选操作)下标从0开始
l1.add(1,"xiaowang");//没有问题
//l1.add(11,"li");//IndexOutOfBoundsException 报错,下表越界!
l1.add(3,"xiaoli");//在集合界后面一个可以添加
//l1.add(5,"asd"); //IndexOutOfBoundsException 报错,下表越界!
show(l1); System.out.println("获取功能 Object get(int index) :******************************"); //B:获取功能 get(int index) 返回此列表中指定位置的元素。
System.out.println("get:"+l1.get(2));
//IndexOutOfBoundsException 报错,下表越界!
//System.out.println("get:"+l1.get(11)); System.out.println(" Object remove(int index)删除该列表中指定位置的元素(可选操作)。****");
//remove(int index) 删除该列表中指定位置的元素(可选操作)。
System.out.println("remove:"+l1.remove(1)); //返回移除的元素
show(l1);
//System.out.println("remove:"+l1.remove(11)); //IndexOutOfBoundsException 报错,下表越界! System.out.println("Object set(int index, E element) 用指定的元素(可选操作)替换此列表中指定位置的元素。 ****");
System.out.println("set:"+l1.set(1, "xiaowangya")); //返回被修改的元素
show(l1);
System.out.println("List集合特有的遍历方式******************"); //List集合特有的遍历方式
for(int i = 0;i<l1.size();i++) {
String s = (String)l1.get(i);
System.out.println(s);
} //用Iterator迭代器遍历
show(l1); }
}

  (4)列表迭代器的特有功能:(了解)

    可以逆向遍历,但是要先正向遍历,所以毫无意义,基本不会使用。

 package com.wyh.Iterator;

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; /**
* @author WYH
* @version 2019年11月9日 下午7:31:41
*
* ListIterator : List集合特有的迭代器
*
*/
public class ListIteratorDemo1 {
public static void main(String[] args) {
//创建集合
List i = new ArrayList(); //创建字符串对象并将其添加到集合中
i.add("王友虎");
i.add("李宏灿");
i.add("赵以浩");
i.add("齐博源");
i.add("李先锋"); //ListIterator 继承了 Iterator,所以可以用它的实现
Iterator it = i.iterator();
while(it.hasNext()) {
String s = (String)it.next();
System.out.println(s);
}
System.out.println("----------------------"); // previous()逆向打印
ListIterator list = i.listIterator();
/*//如果逆向打印处于第一个位置,输出为空
* System.out.println("------------逆向打印------------------");
while(list.hasPrevious()) {
String s3 = (String)list.previous();
System.out.println(s3);
}*/
while(list.hasNext()) {
String s2 = (String)list.next();
System.out.println(s2);
}
System.out.println("------------逆向打印------------------");
while(list.hasPrevious()) {
String s3 = (String)list.previous();
System.out.println(s3);
} } }

  (5)并发修改异常

    A: 出现的异常

      迭代器遍历集合,集合修改集合元素

    B: 原因

      迭代器是依赖集合二点,而集合的改变,迭代器并不知道。

    C: 解决方案

      a: 迭代器遍历,迭代器修改(ListIterator)

        元素添加在刚刚迭代器的位置

      b: 集合遍历,集合修改(size()和get())

        元素添加在集合的末尾

    两种方式如下:

 package com.wyh.Iterator;

 import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator; /**
* @author WYH
* @version 2019年11月9日 下午7:51:26
*
* 并发修改异常:ConcurrentModificationException
*
*/
public class ListIteratorDemo2 {
public static void main(String[] args) {
//创建集合对象
List list = new ArrayList(); //创建字符串对象并将其添加到集合中去
list.add("王友虎");
list.add("李宏灿");
list.add("赵以浩");
list.add("齐博源");
list.add("李先锋"); /*//创建迭代器(Iterator迭代器)(错误示范-----------------)
Iterator it = list.iterator();
//找到元素并进行添加张国兴
while(it.hasNext()) {
String s = (String)it.next();
if("李宏灿".equals(s)) {
list.add("123");
}
}
System.out.println("list:"+list);*/ //方法1:创建ListIterator迭代器,迭代器调用add方法进行添加
ListIterator listt = list.listIterator();
while(listt.hasNext()) {
String s = (String)listt.next();
if("李宏灿".equals(s)) {
listt.add("张国兴"); //在找到的元素后面进行添加
}
}
System.out.println("list:"+list); //方法2:利用for循环直接对集合进行遍历,集合中有添加的方法
for(int i = 0;i<list.size();i++) {
String s = (String)list.get(i);
if(s.equals("李宏灿")) {
list.add("张果喜"); //在末尾进行添加
}
}
System.out.println("list:"+list); } }

  (6)常见数据结构

    A: 栈 先进后出

    B: 队列 先进先出

    C: 数组 查询快,增删慢

    D: 链表 查询吗,慢,增删快

  (7)List的子类特点(面试题)

    ArrayList

      底层数据结构是数组,查询快,增删慢。

      线程不安全,效率高。

    Vector

      底层数据结构是数组,查询快,增删慢。

      线程安全,效率低。

    LinkedList

      底层数据结构是链表,查询慢,增删快。

      线程不安全,效率高。

    到底使用谁呢?看需求?

    分析:

      要安全吗?

        要:Vector(即使要,也不适用这个,后面再说)

        不要:ArrayLIst或者LinkedList

          查询多:ArrayList

          增删多:LinkedList

      都不知道选啥的时候,选ArrayList。

大数据之路week01--day02_2 集合方面的总结的更多相关文章

  1. 大数据之路week02 List集合的子类

    1:List集合的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. Vector: 底层数据结构是数组,查询快,增删慢. 线程安 ...

  2. 大数据之路week02 Collection 集合体系收尾(Set)

    1.Set集合(理解) (1)Set集合的特点 无序,唯一. (2)HashSet集合(掌握) A: 底层数据结构是哈希表(是一个元素为链表的数组) B: 哈希表底层依赖两个方法: hashCode( ...

  3. 大数据之路week02--day03 Map集合、Collections工具类的用法

    1.Map(掌握) (1)将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. (2)Map和Collection的区别? A: Map 存储的是键值对形式的元素,键唯一,值可以 ...

  4. 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素

    package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...

  5. 大数据之路week01--自学之集合_1(Collection)

    经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...

  6. 大数据之路week04--day06(I/O流阶段一 之异常)

    从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...

  7. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  8. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  9. 大数据之路week04--day03(网络编程)

    哎,怎么感觉自己变得懒了起来,更新博客的频率变得慢了起来,可能是因为最近得知识开始变得杂变得难了起来,之前在上课的时候,也没有好好听这一方面的知识,所以,现在可以说是在学的新的知识,要先去把新的知识思 ...

  10. 大数据之路week03--day05(线程 I)

    真的,身体这个东西一定要爱护好,难受的时候电脑都不想去碰,尤其是胃和肾... 这两天耽误了太多时间,今天好转了立刻学习,即刻不能耽误!. 话不多说,说正事: 1.多线程(理解) (1)多线程:一个应用 ...

随机推荐

  1. XCTF-CAT

    果然还是我太菜了呜呜呜,这道题仍然是没有自己做出来.哎. 这一道用的并不是PHP的环境,而是用Python中的Django编写的. 记得做过类似的一道题目.来源于MOCTF中的网站扫描器,当时做完后其 ...

  2. SDN网络IPv6组播机制支持实时视频业务海量用户扩展

    以 OpenFlow 技术为核心的软件定义网络(SDN)框架具有集中控制的功能能够自己感知网络拓扑的变化,在细粒度的路径选择.接入控制.负载均衡方面有着天然的优势,为 IPv6 组播功能的实现提供了好 ...

  3. 货物运输 51Nod - 1671

    公元2222年,l国发生了一场战争. 小Y负责领导工人运输物资. 其中有m种物资的运输方案,每种运输方案形如li,ri.表示存在一种货物从li运到ri. 这里有n个城市,第i个城市与第i+1个城市相连 ...

  4. .netCore+Vue 搭建的简捷开发框架 (5)

    文章目录:.netCore+Vue 搭建的简捷开发框架--目录 上两节的内容介绍了一些关于.netCore 相关的一些基础知识.介绍这些的目的,最主要的还是为了我们的架构搭建服务. 上一节中,我们介绍 ...

  5. unittest执行用例方法

    #coding=utf-8 from selenium import webdriver from time import sleep import unittest#导入unittest库 impo ...

  6. CTFd平台部署

    学校要办ctf了,自己一个人给学校搭建踩了好多坑啊..这里记录一下吧 心累心累 这里只记录尝试成功的过程 有些尝试失败的就没贴上来 为各位搭建的时候节省一部分时间吧. ubuntu18搭建 0x01 ...

  7. 机器学习:weka中添加自己的分类和聚类算法

    不管是实验室研究机器学习算法或是公司研发,都有需要自己改进算法的时候,下面就说说怎么在weka里增加改进的机器学习算法. 一 添加分类算法的流程 1 编写的分类器必须继承 Classifier或是Cl ...

  8. NoticeBoard

    本人蒟蒻,请轻点虐. 本人是一个即将退役的蒟蒻. 有些题目和模拟赛用密码保护起来了,请小伙伴们不要猜了,猜不出来的.想知道大佬们如果想查看可以直接找我问,您们高抬贵眼会让我受宠若惊. 哇终于有人找我要 ...

  9. Spring Boot入门(一):搭建Spring Boot项目

    从本篇博客开始,我们开始进入Spring Boot的世界,它的出现使Spring的开发变得更加简洁,因此一经推出受到众多程序员的喜爱. 作为Spring Boot系列的第一篇博客,我们先来讲解下如何搭 ...

  10. JAVA学习笔记-1.Tomcat&Servlet

    ##web相关概念 1.软件架构 1.C/S 2.B/S 2.资源分类 1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源, 静态资源可以直接被浏览器解析. * 如:html, css, ...