Java中集合概念
集合的由来:
我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了
方便对多个对象进行操作,我们就必须把这多个对象进行储存,而想要储存多个对象,就
不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,
有哪些是容器类型的呢? 数组和StringBuffer。但是,StringBuffer的结果是一个字符串
不一定满足我们的需求,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应
变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集
合类供我们使用。
数组和集合的区别:
A:长度区别
数组的长度固定
集合长度可变
B:内容不同
数组存储的是同一种类型的元素
而集合可以存储不同类型的元素
C:元素的数据类型问题:
数组可以存储基本数据类型,也可以存储引用类型
集合只能存储引用类型
集合是存储多个元素的,但是,存储多个元素我们也是有不同需求的:比如说,我要这多个元素
中不能有相同的元素,再比如说,我要这多个元素按照某种规则排序一下针对不同的需求,Java
就提供了不同的集合类,这样,Java就提供了很多个集合类,这多个集合类的数据结构不同。结
构不同不重要,重要的是你要能够储存东西,并且还要能够使用这些东西,比如说判断,获取等。
既然这样,那么,这多个集合类是有共性的内容的,我们把这些集合类的共性内容不断的向上提取,
最终就能形成集合的继承体系结构。
数据结构:数据的储存方式。
Collection:是集合的顶层接口,他的子体系是重复的,有唯一的,有有序的。
Collection的功能概述:
1:添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
2:删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素
boolean removeAll(Collection c):移除一个集合的元素
3:修改功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素
boolean isEmpty():判断集合是否为空
4:获取功能
Iterator<E> iterator():迭代器:集合的专用遍历方式
5:长度功能
int size():元素的个数
面试题:数组有没有length()方法?字符串有没有length()方法?集合有没有length()方法? //数组求长度用length属性, 字符串求长度用length()方法,集合求长度用size()方法. //所以数组没有length()方法,字符串有length()方法,集合没有length()方法!
6:交集功能
boolean retainAll(Collection c):用于从列表中移除未包含在指定collection中的所有元素
7:把集合转换为数组
Object[] toArray()
Collection接口的概述
Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为collection的元素。一些collection允许有重复的元素,而另一些则
不允许。一些collection是有序的,而另一些则是无序的。
/**集合框架:Collection集合的基本功能测试:*/
public static void main(String[] args){
//测试不带All的方法
//创建集合对象
//Collection c = new Collection(); //错误,因为接口不能实例化
Collection c = new ArrayList();
1 //boolean add(Object obj):添加一个元素
System.out.println("c:"+c);//c:[]
System.out.println("add"+c.add("hello"));//c:[hello] /*这里说明一下:看到c.add是通过对象c调用的add方法,那是通过c调用ArrayList里面的方法*/
c.add("hello");
c.add("world");
c.add("java");
System.out.println("c:"+c);//c:[hello,world,java]
2 //void clear():移除所有元素
c.clear();
System.out.println("c:"+c);//c:[]
2 //boolean remove(Object o):移除一个元素
System.out.println("remove:"+c.remove("hello"));//remove:true
System.out.println("c:"+c);//c:[world,java] //这里的输出表示 使用remove方法删除一个元素后,原来地址的值也会被删除
System.out.println("remove:"+c.remove("javase"));//remove:false //因为原来值里面没有javase 所以false
3 //boolean contains(Object o):判断集合中是否包含指定的元素
System.out.println("contains:"+c.contains("hello"));//contains:true //表示包含指定元素,如果没有,返回false
3 //boolean isEmpty():判断集合是否为空
System.out.println("isEmpty:"+c.isEmpty());//isEmpty:false 因为有值 所以返回false 没有值:就是true
5 //int size():元素的个数
Systme.out.println("size:"+c.seze());size:3
}
/**集合框架:Collection集合的高级功能测试:*/
//boolean addAll(Collection c):添加一个集合的元素
//boolean removeAll(Collection c):移除一个集合的元素
//boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(全部元素)
//boolean retainAll(Collection c):用于从列表中移除未包含在指定collection中的所有元素
public static void main(String[] args){
//创建集合1
Collection c1 = new ArrayList();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
System.out.println(c1);//[abc1, abc2, abc3, abc4]
//创建集合2
Collection c2 = new ArrayList();
c2.add("abc5");
c2.add("abc6");
c2.add("abc7");
System.out.println(c2);//[abc5, abc6, abc7]
1.//boolean addAll(Collection c):添加一个集合的元素
System.out.println("addAll:"+c1.addAll(c2));addAll:true
System.out.println(c1);//[abc1, abc2, abc3, abc4, abc5, abc6, abc7]
//此时:如果c2.add("abc4"); 就是在c2对象增加abc4这个字符串 在使用这个方法,则会输出[abc1, abc2, abc3, abc4, abc4, abc5, abc6, abc7] //表示使用这个方法可以添加重复对象元素
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.//boolean removeAll(Collection c):移除一个集合的元素
//那么移除一个元素是true还是多个呢? 一个
//只要有一个元素被移除了,就返回true
//创建集合1
Collection c1 = new ArrayList();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
//创建集合2
Collection c2 = new ArrayList();
c2.add("abc4");
c2.add("abc5");
c2.add("abc6");
c2.add("abc7");
System.out.println("removeAll:"+c1.removeAll(c2));//removeAll:true
System.out.println(c1);//[abc1, abc2, abc3] //移除了abc4,返回true 只要c1里面有的 c2也有就会删除,删除共同存在的
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.//boolean containsAll(Collection c):判断集合中是否包含指定的集合元素
//只有包含所有的元素才叫包含
//创建集合1
Collection c1 = new ArrayList();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
//创建集合2
Collection c2 = new ArrayList();
c2.add("abc4");
c2.add("abc5");
c2.add("abc6");
c2.add("abc7");
System.out.println("containsAll:"+c1.containsAll(c2));//containsAll:false
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4.//boolean retainAll(Collection c):用于从列表中移除未包含在指定collection中的所有元素
//两个集合都有的元素?思考元素去哪了,返回的boolean有是什么意思
//假设有两个集合A,B。A对B做交集,最终的结果保存在A中,B不变。返回值表示的是A是否发生过改变。
//创建集合1
Collection c1 = new ArrayList();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
//创建集合2
Collection c2 = new ArrayList();
c2.add("abc4");
c2.add("abc5");
c2.add("abc6");
c2.add("abc7");
System.out.println("retainAll:"+c1.retainAll(c2));//retainAll:true
System.out.println("c1");//[abc4] //两个对象的交集最后保存在c1中
System.out.println("c2");//[abc4, abc5, abc6, abc7]
}
================================================================================================================================================================================================
7. //Object[] toArray()
集合的遍历。其实就是依次获取集合中的每一个元素。
Object[] toArray():把集合转成数组,可以实现集合的遍历
public static void main(String[] args){
//创建集合对象
Collection c = new ArrayList();
//添加元素
c.add("hello");//Object obj = "hello"; 向上转型(这里有一个隐式转换)
c.add("world");
c.add("java");
//遍历
//Object[] toArray():把集合转成数组,可以实现集合的遍历
Object[] objs = c.toArray();
for(int x=0;x<objs.length;x++){
//System.out.println(objs[x]); //hello world java
//我知道元素是字符串,我在获取到元素的同时,还想知道元素的长度。
//System.out.println(objs[x]+"---"+objs[x].length());
//上面的实现不了,原因是Object中没有length()方法
//我们要向使用字符串的方法,就必须把元素还原成字符串
//向下转型
String s = (String) objs[x];
System.out.println(s+"---"+s.length());//hello---5
//world---5
//java---4
}
}
================================================================================================================================================================================================
//Iterator<E> iterator():迭代器:集合的专用遍历方式
package javatest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class A {
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()) {
String s = (String) it.next();
System.out.println(s);
}
//其实开发中大多数人在这里不写while而是for //for只是效率高但是不太容易看懂
for (Iterator it = s.iterator(); it.hasNext();) {
AText z = (AText) it.next();
System.out.println(z);
}
}
}
最后输出:hello
world
java
关于迭代器:
迭代器:是遍历集合的一种方式。
迭代器是依赖于集合而存在的。
通过调用集合里的方法使用
//集合的使用步骤:
A:创建集合对象
B:创建元素对象
C:把元素添加到集合
D:遍历集合
a:通过集合对象获取迭代器对象
b:通过迭代器对象hasNext()方法判断是否有元素
c:通过迭代器对象的next()方法获取元素并移动到下一个位置
//思考:迭代器为什么不定义成一个类,而是一个接口?
假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该
类的方法来实现集合的遍历。但是呢?我们想想,Java中提供了很多的集合
而这些集合类的数据结构是不同的,所以,储存的方式和遍历的方式应该是
不同的。进而他们的遍历也应该不是一样的,最终,就没有定义迭代器类。
无论你是哪种集合,你都应该具备获取元素的操作,并且,最好在辅助
与判断功能,这样,在获取前,先判断,这样就更不容易出错。也就说,判
断功能和获取功能应该是一个集合遍历所具备的,而每种集合的方式又不太
一样,所以我们把这两个功能给提取出来,并不提供具体实现,这种方式就
是接口。
那么,真正的具体的实现类在哪里呢?
在真正的具体的子类,以内部类的方式体现的。
//这个内部类里面一层套一层
Java中集合概念的更多相关文章
- Java中集合List,Map和Set的区别
Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...
- java中集合Collection转list对象
参考:java中集合Collection转list对象 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象 // 购物项集合,K商品I ...
- JAVA中集合转数组遍历
JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) { ...
- Java中集合List,Map和Set的差别
Java中集合List,Map和Set的差别 1.List和Set的父接口是Collection.而Map不是 2.List中的元素是有序的,能够反复的 3.Map是Key-Value映射关系,且Ke ...
- Java中集合的概述
一.集合和数组的区别 1.数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 2.集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数 ...
- Scala中集合类型与java中集合类型转换
对于java中的集合元素并不能在scala中拿来就用的,需要进行相应的转换. 1. 转换规则如下 从下面可以看出,有些可以相互转换的,有些只能单向转换: scala.collection.Iterab ...
- Java中集合关键字的区别
1. ArrayList.Vector和Stack有什么区别? 1.ArrayList的方法和实现基本上和Vector一样,底层都是数组的实现(简:API基本一样) 2.Stack继承了Vec ...
- JMM之Java中锁概念的分类总结
在Java的并发编程中不可避免的涉及到锁.从不同维护可以将锁进行不同的分类,如下: 1.乐观锁和悲观锁(根据读写操作的比例划分) 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数 ...
- JAVA中集合输出的四种方式
在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...
随机推荐
- 【NLP面试QA】激活函数与损失函数
目录 Sigmoid 函数的优缺点是什么 ReLU的优缺点 什么是交叉熵 为什么分类问题的损失函数为交叉熵而不能是 MSE? 多分类问题中,使用 sigmoid 和 softmax 作为最后一层激活函 ...
- macbook中出现2003 - Can't connect to MySQL server on '127.0.0.1' (61 "Connection refused") 如何解决
第一步 关闭mysql服务: 苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) 如果这种方法没有成功: 可以使用命令行 ...
- 详谈XSS防御方法
1.HttpOnly 严格的说,httponly并非为了对抗XSS,它解决的是XSS后的Cookie劫持攻击.Cookie设置了httponly之后,JavaScript读不到该cookie的值. ...
- 【线段树基础】NKOJ 1321 数列操作
时间限制 : 10000 MS 空间限制 : 165536 KB 问题描述 假设有一列数{Ai}(1≤i≤n),支持如下两种操作:将Ak的值加D.(k, D是输入的数)输出As+As+1+…+At ...
- # H - H HDU - 2066 (多起点、多终点问题)
H - H HDU - 2066 (多源点.多汇点问题) 一个图上,有M条边,Z个出发点,Y个终止点.求一条最短路,其中起点是Z中的任意一点,终点是Y中任意一点. Input 输入数据有多组,输入直到 ...
- 1051 Pop Sequence (25分)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...
- 【数据库测试工具】认识Sysbench
本文基于课堂PPT笔记整理,主要介绍一下Sysbench及其简单使用,实验代码部分在代码中有重点注释,不另作说明. 一,基准测试 什么是数据库的基准测试? 数据库的基准测试是对数据库的性能指标进行定量 ...
- 计算机人推荐书目&网站(不断更新)
计算机人推荐书目&网站(不断更新) 鉴于最近有很多同学问我学什么读什么书好,我把我自己的经历和愚见写下来,仅供参考.我只会写我亲自读过有感悟的书,而不会搬运一些我碰都没有碰过只闻大名的书.本人 ...
- EntityFramework Core 3.x上下文构造函数可以注入实例呢?
前言 今天讨论的话题来自一位微信好友遇到问题后请求我的帮助,当然他的意图并不是本文标题,只是我将其根本原因进行了一个概括,接下来我们一起来探索标题的问号最终的答案是怎样的呢? 上下文构造函数是否可以注 ...
- uni-app商城项目(01)
1.项目准备: 1.新建项目,清理项目结构 2.完成项目初始化配置. 2.项目开始阶段: 1.完成tabBar配置,新建需要的页面 2.在 '/utis'封装需要的发送请求api,有利于功能的实现. ...