day10-集合框架-对象数组的概述与引用

1 集合框架的简单介绍:

  • A:集合的由来

    • 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
  • B:数组和集合的区别
    • 区别1 :

      • 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
      • 集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
    • 区别2:
      • 数组长度是固定的,不能自动增长
      • 集合的长度的是可变的,可以根据元素的增加而增长
  • C:数组和集合什么时候用
    * 1,如果元素个数是固定的推荐用数组
    * 2,如果元素个数不是固定的推荐用集合

2 Collection集合的基本功能测试

  • A:案例演示

  • 基本功能演示

    boolean add(E e)
    boolean remove(Object o)
    void clear()
    boolean contains(Object o)
    boolean isEmpty()
    int size()

/*
boolean add(E e) 添加
boolean addAll(E e) 添加一个对象
boolean remove(Object o) 删除
void clear() 清空该容器中所有对象
boolean contains(Object o) 判断集合里是否包含指定元素
boolean isEmpty() //判断集合是否为空
int size() 返回集合容器大小
*/ import java.util.ArrayList;
import java.util.Collection;
class DemoCollection {
public static void main(String[] args) {
//Collection c=new Collection();不能这样写,因为Collection是接口,抽象的
Collection c=new ArrayList();
System.out.println(c.add(100)); //添加内容可以为任意对象
System.out.println(c.add("50"));
Collection c0=new ArrayList();
System.out.println(c0.add(c)); //将c添加到c0里
System.out.println(c.remove("a")); //c对象中并没有字符串a
System.out.println(c.remove(100)); //将100从c对象中删除
c.clear(); //清空
System.out.println(c);
System.out.println(c.isEmpty()); //判断是否为空 Collection c1=new ArrayList();
c1.add(100);
c1.add("50");
System.out.println(c1.contains(100)); //判断100是否包含在c1对象里
System.out.println(c1.isEmpty());
int i=c1.size(); //返回集合容器大小
System.out.println(i);
}
}
/*
运行结果:
true
true
true
false
true
[]
true
true
false
2
*/
复制代码
    • B:注意:
  • collectionXxx.java使用了未经检查或不安全的操作.
    注意:要了解详细信息,请使用 -Xlint:unchecked重新编译.
    java编译器认为该程序存在安全隐患
    温馨提示:这不是编译失败,所以先不用理会,等学了泛型你就知道了

3 toArray集合转换为数组

package com.hui;

public class Student {
private String name; //私有化成员变量,只在本类中有效
private int age;
public Student() {} //空参构造函数
public Student(String name,int age) { //有参构造函数
this.name=name; //将参数赋值于局部变量
this.age=age;
}
public void setName(String name) { //设置年龄
this.name=name;
}
public String getName() { //获取年龄
return name;
}
public void setAge(int age) { //设置姓名
this.age=age;
}
public int getAge() { //获取姓名
return age;
}
public String toString() {
return "姓名:"+name+" 年龄:"+age;
}
} /*
* 把集合转成数组,可以实现集合的遍历
* toArray()
*/
package com.kai;
import java.util.Collection;
import java.util.ArrayList;
import com.hui.Student;
class DemoToArray {
public static void main(String[] args) {
Collection c=new ArrayList(); //父类引用指向子类对象
c.add(new Student("小红",20)); //添加对象
c.add(new Student("小兰",21));
c.add(new Student("小花",22));
c.add(new Student("小黑",23));
/*
解释:
c.add(new Student("小红",20));
add(E e)里的E指的是Object,所以这里相当于
Object o=new Student("小红",20)
此处的("小红",20)已经向上转型为了Object型
*/
Object[] arr=c.toArray(); //将集合转成数组
for(int i=0;i<arr.length;i++) {
Student s=(Student)arr[i]; //arr[i]为Object类型,必须向下Student转型
System.out.println(s.toString()); //toString()可以省略不写
}
}
}
复制代码

4 Collection的all系列

/*
boolean addAll(Collection c) 添加对象
boolean removeAll(Collection c) 删除的是两个集合的交集,只要有交集就返回true,无交集flase
boolean containsAll(Collection c) 判断调用的集合是否包含传入的集合
boolean retainAll(Collection c) 取交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false
*/ import java.util.ArrayList;
import java.util.Collection;
class DemoCollectionAll {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Collection c1=new ArrayList();
c1.add("e");
c1.add("f");
System.out.println(c.addAll(c1)); //将对象c1添加到对象c中
System.out.println(c.containsAll(c1)); //判断调用的集合是否包含传入的集合
Collection c2=new ArrayList();
c2.add("a");
c2.add("m");
System.out.println(c.addAll(c2)); //删除的是两个集合的交集,只要有交集就返回true,无交集flase Collection c3=new ArrayList();
c3.add("abcd");
Collection c4=new ArrayList();
c4.add("ab");
System.out.println(c3.retainAll(c4));
/*
取c3与c4的交集,为ab,然后拿着交集和c3比较,不一样返回true
*/
Collection c5=new ArrayList();
c5.add("abcdef");
System.out.println(c3.retainAll(c5));
/*
取c3与c5的交集,为abcd,然后拿着交集和c3比较,一样返回false
*/ }
}
/*
运行结果:
true
true
true
true
false
*/
复制代码

5 迭代器

  • 迭代器概述

    • 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
class DemoIteration {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
Iterator it=c.iterator(); //获取迭代器;
boolean b=it.hasNext(); //hasNext返回值类型为boolean型,功能是判断集合中是否有元素,有元素就返回ture
//也可以说成如果还有元素可以迭代,就返回ture
Object o=it.next(); //返回迭代的下一个元素
System.out.println(o); //输出一个迭代的a while(it.hasNext()) {
Object oo=it.next(); //next()有指针的功能,能接着上次的迭代结果继续迭代
System.out.println(oo);
}
}
}
/*
运行结果:
a
b
c
d
*/
复制代码

6 自定义对象的迭代

		c.add(new Student("张三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("赵六",26));
c.add(new Student("赵六",26)); for(Iterator it = c.iterator();it.hasNext();) {
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge());
复制代码

7 List集合的功能概述

/*
* List集合的特有功能概述
* void add(int index,E element) //向集合的指定索引位置添加对象,其它对象的索引位置相对后移一位
* E remove(int index) //清除集合中指定索引位置对象
* E get(int index) //用来获得指定位置索引的对象
* E set(int index,E element) //将集合中指定索引位置的对象修改为指定的对象
*/
import java.util.Collection;
import java.util.ArrayList;
import java.util.List; class DemoList {
public static void main(String[] args) {
List l=new ArrayList();
l.add("a");
l.add("b");
l.add("hello");
l.add("c");
l.add("d");
l.add(1,"m"); //添加一个对象
System.out.println(l);
//[a, m, b, hello, c, d]
List ll=new ArrayList();
ll.add("123");
l.add(3,ll); //添加一个List对象
System.out.println(l);
//[a, m, b, [123], hello, c, d]
l.remove(3);
System.out.println(l); //删除索引3处的位置
//[a, m, b, hello, c, d]
l.get(3); //只是获取,不改变l对象的内容
System.out.println(l); //l对象内容并没有改变
//[a, m, b, hello, c, d]
System.out.println(l.get(3)); //打印出获取的对象
//hello
l.set(3,"world"); //在此处已经将l修改
System.out.println(l);
//[a, m, b, world, c, d]
System.out.println(l.set(3,"world"));
//无法理解此处出现的会是world ????????????????
}
}
/*
运行结果;
[a, m, b, hello, c, d]
[a, m, b, [123], hello, c, d]
[a, m, b, hello, c, d]
[a, m, b, hello, c, d]
hello
[a, m, b, world, c, d]
world
*/
复制代码

8 集合框架(并发修改异常产生的原因及解决方案)

需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。

List list = new ArrayList();
list.add("a");
list.add("b");
list.add("world");
list.add("d");
list.add("e");
/*Iterator it = list.iterator();
while(it.hasNext()) {
String str = (String)it.next();
if(str.equals("world")) {
list.add("javaee"); //这里会抛出ConcurrentModificationException并发修改异常
}
}*/
复制代码
  • ConcurrentModificationException出现

  • 迭代器遍历,集合修改集合

  • 解决方案
    *a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
    *b:集合遍历元素,集合修改元素

    ListIterator lit = list.listIterator(); //如果想在遍历的过程中添加元素,可以用ListIterator中的add方法
    while(lit.hasNext()) {
    String str = (String)lit.next();
    if(str.equals("world")) {
    lit.add("javaee");
    //list.add("javaee");
    }
    }

转载于:https://juejin.im/post/5bd9a23d5188257f8a79feda

集合框架-day10的更多相关文章

  1. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  2. 【目录】JUC集合框架目录

    JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...

  3. java面试题——集合框架

    先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...

  4. Java使用实现面向对象编程:第七章集合框架的解读=>重中之重

    对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...

  5. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  6. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  7. Java 之 集合框架(JCF)

    1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...

  8. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  9. 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)

    一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...

随机推荐

  1. jmeter发送Query String Parameters格式参数报错

    当发起一次GET请求时,参数会以url string的形式进行传递.即?后的字符串则为其请求参数,并以&作为分隔符 当参数为json格式时,这时需要勾选编码,否则会报错

  2. c++类模板之分文件编写问题及解决

    我们在实际项目中一般习惯头文件(.h)和源文件(.cpp)分开写,这样做的好处良多,但是如果遇到了类模板,这样可能会有一点儿问题. 我们通过一个例子来看: person.h: #pragma once ...

  3. jvm入门及理解(一)——简介与体系架构

    最近,在学习java虚拟机的内容中,在此总结和记录下学到的. 一.JVM在计算机中的位置 在我们初学java时,便知道java源文件文件会先通过Java编译器编译成字节码文件,这个过程是java编译过 ...

  4. 17-jmeter相关插件介绍

    转--https://www.cnblogs.com/imyalost/p/7751981.html

  5. Spring--开篇 (spring优缺点、模块组件、各个jar包详解)

    Spring--开篇 分类: SSH&EJB2012-11-23 15:25 4369人阅读 评论(13) 收藏 举报 javaJavaJAVAspringSpringwebWebWEB框架 ...

  6. 利用opencv实现视频捕捉功能

    import cv2 as cv import numpy as np def video_demo(): capture = cv.VideoCapture(0) #打开摄像头,参数0代表设备ID( ...

  7. GeoGebra的一些指令名字

    列举出老师上课提出的一些命令 比较不常见的命令 1.取得函数上一点的坐标值x(A).y(A).z(A) 2.复数指令real() imaginary() 复数中的虚数应该使用Alt+i打出 点的表示指 ...

  8. Python爬取抖音高颜值小视频

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 有趣的python PS:如有需要Python学习资料的小伙伴可以加 ...

  9. stand up meeting 12/8/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云  --------------    --  -----------  -- PDF Reader 朱玉影         ...

  10. vue axios post请求下载文件,后台springmvc完整代码

     注意请求时要设置responseType,不加会中文乱码,被这个坑困扰了大半天... axios post请求:     download(index,row){         var ts =  ...