大数据之路week01--day02_2 集合方面的总结
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 集合方面的总结的更多相关文章
- 大数据之路week02 List集合的子类
1:List集合的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. Vector: 底层数据结构是数组,查询快,增删慢. 线程安 ...
- 大数据之路week02 Collection 集合体系收尾(Set)
1.Set集合(理解) (1)Set集合的特点 无序,唯一. (2)HashSet集合(掌握) A: 底层数据结构是哈希表(是一个元素为链表的数组) B: 哈希表底层依赖两个方法: hashCode( ...
- 大数据之路week02--day03 Map集合、Collections工具类的用法
1.Map(掌握) (1)将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. (2)Map和Collection的区别? A: Map 存储的是键值对形式的元素,键唯一,值可以 ...
- 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素
package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...
- 大数据之路week01--自学之集合_1(Collection)
经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...
- 大数据之路week04--day06(I/O流阶段一 之异常)
从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...
- 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM
引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...
- 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍
引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文: The NoSQL Ecosystem 目录 The NoSQL Eco ...
- 大数据之路week04--day03(网络编程)
哎,怎么感觉自己变得懒了起来,更新博客的频率变得慢了起来,可能是因为最近得知识开始变得杂变得难了起来,之前在上课的时候,也没有好好听这一方面的知识,所以,现在可以说是在学的新的知识,要先去把新的知识思 ...
- 大数据之路week03--day05(线程 I)
真的,身体这个东西一定要爱护好,难受的时候电脑都不想去碰,尤其是胃和肾... 这两天耽误了太多时间,今天好转了立刻学习,即刻不能耽误!. 话不多说,说正事: 1.多线程(理解) (1)多线程:一个应用 ...
随机推荐
- ES(Elastic Search)update操作设置无 docment时进行insert
最近使用一套数据加工中间工具,查看es操作中的update操作.其中方法命名为updateOrInsert.但是没发现代码中有ES的insert方法调用.于是仔细分析了代码逻辑. 经过一路追溯,直至E ...
- Git上传到gitlab现有分支
[场景]gitlab上已经创建了分支,将本地的文件上传到该分支下 gitlab上的现有分支branch_new 在需要上传的文件夹下打开git命令窗口 # 克隆远端分支到本地 git clone -b ...
- Windows 服务程序(二)
服务控制管理器 (SCM, Service Control Manager),它在系统启动时自动启动,其主要作用是维护和管理一张服务信息表. OpenSCManager() 介绍:功能:建立了一个到服 ...
- Windows下计划任务的使用
0x01 前言 在渗透测试中,尤其是域渗透,常常会用到Windows系统的计划任务,一是用于远程启动程序,二是用于程序的自启动 那么,计划任务具体有哪些使用技巧呢?是否对权限有要求?一定需要管理员权限 ...
- spring源码系列7:Spring中的InstantiationAwareBeanPostProcessor和BeanPostProcessor的区别
概念 Bean创建过程中的"实例化"与"初始化"名词 实例化(Instantiation): 要生成对象, 对象还未生成. 初始化(Initialization ...
- postman设置环境变量与全局变量
1.环境变量可以设置多组 设置环境变量 编辑环境变量 2.全局变量只能设置一组 可以在Pre-request Script和Tests中设置全局变量 如:pm.globals.set("na ...
- python学习-流程控制(四)
学习笔记中的源码:传送门 4.2if分支结构 if语句有三种形式: 如果 if 条件为“真”,程序就会执行 i f条件后面的多条语句:否则就会依次判断 elif 条件,如果 elif 条件为“真”,程 ...
- date命令查看与修改
在我们使用linux服务器时,肯定会遇到Linux服务器时间不准确的情况如何查看Linux系统的时间,如何修改Linux系统上的当前时间呢. 查看Linux系统当前时间: 命令: date +回车 修 ...
- mysql字段按逗号,拆分并按条件查找
mysql字段按逗号,拆分并按条件查找 mysql 表结构 CREATE TABLE `subid` ( `id1` varchar(255) DEFAULT NULL, `id2` varchar( ...
- Yii 1.1.x 单元测试
代码若不整洁,只会越来越糟糕:代码写不好,公司要黄是迟早. Yii 的应用有两种,下面记录这两种应用的单元测试方法 webApplication consoleApplication 在protect ...