集合框架-day10
day10-集合框架-对象数组的概述与引用
1 集合框架的简单介绍:
- A:集合的由来
- 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
- B:数组和集合的区别
- 区别1 :
- 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
- 集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象
- 区别2:
- 数组长度是固定的,不能自动增长
- 集合的长度的是可变的,可以根据元素的增加而增长
- 区别1 :
- 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的更多相关文章
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 【目录】JUC集合框架目录
JUC集合框架的目录整理如下: 1. [JUC]JUC集合框架综述 2. [JUC]JDK1.8源码分析之ConcurrentHashMap(一) 3. [JUC]JDK1.8源码分析之Concurr ...
- java面试题——集合框架
先来看一下集合框架关系图 Collection FrameWork 如下: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └S ...
- Java使用实现面向对象编程:第七章集合框架的解读=>重中之重
对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- Java 之 集合框架(JCF)
1.集合框架 a.框架:为了实现某一目的或功能,而预先提供的一系列封装好的.具有继承或实现关系的类与集合 b.集合:①定义:Java中对一些数据结构和算法进行封装,即封装(集合也是一种对象) ②特点: ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...
随机推荐
- shell查询目标jvm的perm占比
#查询指定进程号下面的方法区使用率,jdk1.7是perm,jdk1.8是metaspace function get_perm_use_percent() { pid="$1" ...
- 来,让我们一起来学习VIM
什么是VIM vim是一个高度可定制的文本编辑器,被很多专业的程序员使用,并获得了程序员的一致好评. 下图是Vim的官网vim.org 你可以在Vim的官网免费下载并使用Vim,同样可以在Vim官网学 ...
- go 切片重组
我们已经知道切片创建的时候通常比相关数组小,例如: slice1 := make([]type, start_length, capacity) 其中 start_length 作为切片初始长度而 c ...
- linux美化网址
参考博文地址 https://blog.csdn.net/qq_42527676/article/details/91356154 https://www.opendesktop.org/ Dash ...
- Django 配置访问顺序 ->MTV开发模式
框架模式mvc m-->model 数据库 v-->view 视图 c-->controller 控件逻辑 mtv(django) m-->model 数据库 t--> ...
- Go语言 中文分词技术使用技巧(一)
分词技术就是搜索引擎针对用户提交查询的关键词串进行的查询处理后根据用户的关键词串用各种匹配方法进行分词的一种技术. 中文分词(Chinese Word Segmentation)指的是将一个汉字序列( ...
- AJ学IOS 之微博项目实战(13)发送微博调用相机里面的图片以及调用相机
AJ分享,必须精品 一:效果 二:代码 相机部分就简单多了,几行代码调用而已,但是如果你要是想实现更多丰富的功能,需要自己写.利用AssetsLibrary.framework,利用这个框架可以获得手 ...
- 一站式WebAPI与认证授权服务
保护WEBAPI有哪些方法? 微软官方文档推荐了好几个: Azure Active Directory Azure Active Directory B2C (Azure AD B2C)] Ident ...
- sql 自增序列
一.使用set identity_insert [database][owner][table]on设置时,要在插入语句中显示列出插入的列;
- 利用SSIS进行SharePoint 列表数据的ETL
好几年前写了一篇<SSIS利用Microsoft Connector for Oracle by Attunity组件进行ETL!>,IT技术真是日新月异,这种方式对于新的SQL SERV ...