集合的由来

数组是很常用的一种数据结构,但假如我们遇到以下这样的的问题:

容器长度不确定

能自动排序

存储以键值对方式的数据

如果遇到这样的情况,数组就比较难满足了,所以也就有了一种与数组类似的数据结构——集合类。即集合是java中提供的一种容器,可用来存储多个数据

数组和集合的区别

1)长度

数组的长度固定

集合的长度可变

2)内容不同

数组存储的是同一种类型元素

集合可存储不同类型的元素

3)元素数据类型

数组可存储基本数据类型,也可存储引用数据类型

集合只能存储引用类型

数组和集合的联系

可使用toArray()和Arrays.asList()方法相互转换

集合的集成体系

集合按存储结构可以分为单列集合(Collection)和双列集合(Map)

Collection

Collection:是单列集合的根接口,Collection表示一组对象。两类子接口分别是LIst和Set【还有一类是Queue】

List接口:特点是元素有序,元素可重复。List接口的主要实现类有ArrayList和LinkedList

Set接口:特点是元素无序并且不可重复。Set接口的主要实现类有HashSet(散列存放)和TreeSet(有序存放)

Map

1)Map提供了一种映射关系,元素是以键值对(key-value)的形式存储的,能够根据key快速查找value,常用子类有Hashtable,HashMap和TreeMap

2)Map中的键值对以Entry类型的对象实例形式存在

3)键(key值)不可重复,value值可以

4)每个建最多只能映射到一个值

5)Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法

6)Map支持泛型,形式如:Map

Hashtable:底层是哈希表数据结构,不可存入null键null值,给集合是线程同步的。

HashMap:底层是哈希表数据结构,允许使用null键null值,该集合是不同步的

TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序

Map接口与Collection接口的不同

map是双列的,collection是单列的

map的键是唯一,collection的子体系set是唯一

map集合的数据结构只针对键有效,跟值无关,collection集合的数据结构是针对元素有效

集合框架思维导图

集合中的方法

集合基本功能测试

向集合中添加元素

/*

*向集合中添加一个元素

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo1{

public static void main(String[] args){

//创建集合对象

//Collection c = new Collection();//错误,接口不能实例化,需要找实现类

Collection c = new ArrayList();

//向集合中添加元素:boolean add(Object o);

c.add("10w");

c.add("20w");

c.add("30w");

//输出

System.out.println(c);

}

}

----------------------------------------------

输出结果:[10w, 20w, 30w]

----------------------------------------------

删除集合中所有元素

/*

*删除集合中所有元素

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo2{

public static void main(String[] args){

//创建集合对象

Collection c = new ArrayList();

//向集合中添加元素

c.add("100w");

c.add("200w");

c.add("300w");

System.out.println("删除前:"+c);

//删除集合中所有元素:void clear()

c.clear();

System.out.println("删除后:"+c);

}

}

------------------------------------------

输出结果:

删除前:[100w, 200w, 300w]

删除后:[]

------------------------------------------

删除该集合中指定的元素

/*

* 删除该集合中指定元素

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo3{

public static void main(String[] args){

//创建集合

Collection c = new ArrayList();

//向集合中添加元素

c.add("10w");

c.add("30w");

c.add("50w");

System.out.println("删除前:"+c);

//删除该集合中中指定的元素:boolean remove(Object o)

c.remove("30w");

System.out.println("删除后:"+c);

}

}

---------------------------------------------

输出结果:

删除前:[10w, 30w, 50w]

删除后:[10w, 50w]

----------------------------------------------

判断该集合中是否包含某个元素

/*

*判断该集合中是否包含某个元素

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo4{

public static void main(String[] args){

//创建集合

Collection c = new ArrayList();

//添加元素

c.add("hadoop");

c.add("spark");

c.add("storm");

System.out.println(c);

//判断该集合中是否包含某个元素:boolean contains(Object o)

System.out.println("判断有没有spark:"+c.contains("spark"));

System.out.println("判断有没有data:"+c.contains("data"));

}

}

---------------------------------------------

输出结果

[hadoop, spark, storm]

判断有没有spark:true

判断有没有data:false

------------------------------------------------

判断集合是否为空

/*

*判断集合是否为空

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo5{

public static void main(String[] args){

//创建集合

Collection c1 = new ArrayList();

Collection c2 = new ArrayList();

//向集合2中添加元素

c2.add("java");

c2.add("scala");

c2.add("python");

//判断集合是否为空:boolean isEmpty()

System.out.println("判断集合c1是否为空:"+c1.isEmpty());

System.out.println("判断集合c2是否为空:"+c2.isEmpty());

}

}

---------------------------------------------

输出结果

判断集合c1是否为空:true

判断集合c2是否为空:false

-------------------------------------------

获取该集合中元素的个数

/*

*判断该元素的个数

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo6{

public static void main(String[] args){

//创建集合

Collection c = new ArrayList();

//添加元素

c.add("wujiadogn");

c.add("jiangrui");

c.add("sunqiangkun");

c.add("xuqingyu");

//获取该集合的元素个数: int size()

System.out.println(c.size());

}

}

-------------------------------------

输出结果

4

-------------------------------------

将指定集合的所有元素添加到该集合中

/*

*将指定集合的所有元素添加到该集合中

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo7{

public static void main(String[] args){

//创建集合

Collection c1 = new ArrayList();

Collection c2 = new ArrayList();

//添加元素

c1.add("hadoop");

c1.add("spark");

c1.add("storm");

c2.add("wujiadong");

System.out.println("c1:"+c1);

System.out.println("c2:"+c2);

//将指定集合中所有元素添加到该元素中:boolean addAll(Collection c)

c1.addAll(c2);//将c2添加到c1中

System.out.println("将集合c2元素添加到c1后的c1:"+c1);

System.out.println("将集合c2元素添加到c1后的c2:"+c2);

}

}

---------------------------------------

输出结果

c1:[hadoop, spark, storm]

c2:[wujiadong]

将集合c2元素添加到c1后的c1:[hadoop, spark, storm, wujiadong]

将集合c2元素添加到c1后的c2:[wujiadong]

---------------------------------------

删除指定集合中的所有元素

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo8{

public static void main(String[] args){

//创建集合

Collection c1 = new ArrayList();

Collection c2 = new ArrayList();

//添加元素

c1.add("hadoop1");

c1.add("hadoop2");

c1.add("hadoop3");

c2.add("spark1");

c2.add("spark2");

c2.add("spark3");

c2.add("hadoop1");

System.out.println("c1:"+c1);

System.out.println("c2:"+c2);

System.out.println("c1删除c2的元素");

c1.removeAll(c2);

System.out.println("c1:"+c1);

System.out.println("c2:"+c2);

}

}

----------------------------------------

输出结果

c1:[hadoop1, hadoop2, hadoop3]

c2:[spark1, spark2, spark3, hadoop1]

c1删除c2的元素

c1:[hadoop2, hadoop3]

c2:[spark1, spark2, spark3, hadoop1]

---------------------------------------------

判断该集合中是否包含指定集合的所有元素

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo8{

public static void main(String[] args){

//创建集合

Collection c1 = new ArrayList();

Collection c2 = new ArrayList();

Collection c3 = new ArrayList();

//添加元素

c1.add("hadoop1");

c1.add("hadoop2");

c1.add("hadoop3");

c2.add("spark1");

c2.add("spark2");

c2.add("spark3");

c2.add("hadoop1");

c3.add("hadoop1");

c3.add("hadoop2");

System.out.println("c1:"+c1);

System.out.println("c2:"+c2);

System.out.println("c3:"+c3);

System.out.println("c1是否包含c2:"+c1.containsAll(c2));

System.out.println("c1是否包含c3:"+c1.containsAll(c3));

System.out.println("retainAll()返回值表示c1是否发生过改变:"+c1.retainAll(c2));

System.out.println("c1:"+c1);

System.out.println("c2:"+c2);

}

}

注释:

boolean retainAll(Collection c):两个集合都有的元素

假假设有两个集合A和B,A和B做交集,最终的结果保存在A中,B不变;返回值表示的是A是否发过生改变

--------------------------------

输出结果

c1:[hadoop1, hadoop2, hadoop3]

c2:[spark1, spark2, spark3, hadoop1]

c3:[hadoop1, hadoop2]

c1是否包含c2:false

c1是否包含c3:true

c1和c2都有的元素retainAll():true

c1:[hadoop1]

c2:[spark1, spark2, spark3, hadoop1]

-------------------------------------

集合的遍历

集合的使用步骤

1)创建集合对象

2)创建元素对象

3)把元素添加到集合

4)遍历集合

a:通过集合对象获取迭代器对象

b:通过迭代器对象的hasNext()方法判断是否有元素

c:通过迭代器对象的next()方法获取元素并移动到下一个位置

方法一:通过转换成数组进行遍历

/*

*通过将集合转换成数组进行遍历

*/

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo1{

public static void main(String[] args){

//创建集合

Collection c = new ArrayList();

//向数组中添加元素

c.add("hadoop");

c.add("spark");

c.add("storm");

//Object[] toArray():将集合转换成数组,可以实现集合的遍历

Object[] objs = c.toArray();

for(int i=0;i

System.out.println(objs[i]);

}

}

}

----------------------------------------

输出结果

hadoop

spark

storm

---------------------------------------

练习:用集合存储5个学生对象,并把学生对象进行遍历

import java.util.Collection;

import java.util.ArrayList;

public class CollectionDemo2{

public static void main(String[] args){

//创建集合

Collection c = new ArrayList();

//创建学生对象

Student s1 = new Student("wwww",20);

Student s2 = new Student("jjj",21);

Student s3 = new Student("ddd",22);

Student s4 = new Student("sss",23);

Student s5 = new Student("qqq",24);

//将对象存储到集合中

c.add(s1);

c.add(s2);

c.add(s3);

c.add(s4);

c.add(s5);

//把集合转成数组

Object[] objs = c.toArray();

for(int i=0;i

System.out.println(objs[i]);

}

}

}

class Student{

//成员变量

private String name;

private int age;

//构造方法

public Student(){

super();

}

public Student(String name,int age){

this.name = name;

this.age = age;

}

//getXxx()和setXxx()方法

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 "Student [name="+name+",age="+age+"]";

}

}

---------------------------------

输出结果

Student [name=wwww,age=20]

Student [name=jjj,age=21]

Student [name=ddd,age=22]

Student [name=sss,age=23]

Student [name=qqq,age=24]

--------------------------------

方法二:集合专用遍历方式:迭代器

import java.util.Collection;

import java.util.ArrayList;

import java.util.Iterator;

public class ObjectArrayDemo3{

public static void main(String[] args){

//创建集合

Collection c = new ArrayList();

c.add("hadoop");

c.add("spark");

c.add("storm");

// Iterator iterator();迭代器,集合的专用遍历方式

Iterator it = c.iterator();//实际返回的子类对象,这里是多态

/*

System.out.println(it.next());

System.out.println(it.next());

System.out.println(it.next());

*/

while(it.hasNext()){

String s = (String) it.next();

System.out.println(s);

}

}

}

-------------------------------------

输出结果

hadoop

spark

storm

---------------------------------------

练习:用集合存储5个对象,并把学生对象进行遍历,用迭代器遍历

import java.util.Collection;

import java.util.ArrayList;

import java.util.Iterator;

public class ObjectArrayDemo4{

public static void main(String[] args){

//创建集合

Collection c = new ArrayList();

Student s1 = new Student("www",21);

Student s2 = new Student("jjj",22);

Student s3 = new Student("ddd",23);

Student s4 = new Student("sss",24);

Student s5 = new Student("qqq",25);

c.add(s1);

c.add(s2);

c.add(s3);

c.add(s4);

c.add(s5);

Iterator it = c.iterator();

while(it.hasNext()){

//System.out.println(it.next());

Student s = (Student) it.next();

System.out.println(s);

}

}

}

class Student{

//成员变量

private String name;

private int age;

//无参构造方法

public Student(){

super();

}

//有参构造方法

public Student(String name,int age){

this.name = name;

this.age = age;

}

//getXxx方法和setXxx方法

public void setName(String name){

this.name = name;

}

public String getName(){

return name;

}

public void setAge(int age){

this.age = age;

}

public int age(){

return age;

}

//为什么需要这个方法,没有这个方法输出结果过就是地址值

public String toString(){

return "Student [name="+name+",age="+age+"]";

}

}

-------------------------------------------

输出结果

Student [name=www,age=21]

Student [name=jjj,age=22]

Student [name=ddd,age=23]

Student [name=sss,age=24]

Student [name=qqq,age=25]

--------------------------------------------

练习:存储字符串并遍历

import java.util.Collection;

import java.util.ArrayList;

import java.util.Iterator;

public class ObjectArrayDemo5{

public static void main(String[] args){

//创建集合对象

Collection c = new ArrayList();

//向集合添加元素

c.add("wu");

c.add("sun");

c.add("jiang");

c.add("xu");

c.add("haha");

//通过集合对象获取迭代器对象

Iterator it = c.iterator();

//通过迭代器对象的hasNext()方法判断有没有元素

while(it.hasNext()){

//通过迭代器对象的next()方法获取元素

String s = (String) it.next();

System.out.println(s);

}

}

}

-----------------------------------

输出结果

wu

sun

jiang

xu

haha

------------------------------------

参考资料

5 java中的集合类_java基础(5)-集合类1相关推荐

  1. Java中introduce方法_Java基础—继承

    继承是面向对象的核心特征之一,是由已有类创建新类的机制.利用继承机制,可以先创建一个具有共性的一般类,然后根据该一般类创建具有特殊性的新类,新类继承一般类的属性和方法,并根据需要增加自己的新属性和方法 ...

  2. 圆的周长在java中怎么表示_Java基础之计算圆的周长

    最简单的程序 圆形的周长公式: C=πd=2πr π是圆周率,约等于3.14,公式中r为圆的半径,d为圆的直径 在数学领域,称之为公式,在计算机领域,习惯称之为算法. 算法描述的是,如果要解决一个问题 ...

  3. java中字符串常量_Java基础-Java中字符串常量详解

    --------第一个例子--------- String str1 = "a"; String str2= "b"; String str3= "a ...

  4. java中定义坐标_Java 基础接口——坐标

    定义一个"点"(Point)类用来表示三维空间中的点(有三个坐标).要求如下: (1)可以生成具有特定坐标的点对象. (2)提供可以设置三个坐标的方法. (3)提供可以计算该&qu ...

  5. Java中易忽略的基础知识

    欢迎关注我的公众号[软件大爆炸] Java学习中的碎碎念 Java中易忽略的基础知识 Java面向对象基础 Java中的核心类 Java抽象类和接口 Java中的异常 Java中的泛型与集合 Java ...

  6. pgsql中float4导致java程序精度丢失_Java基础系列02

    注释 Java中支持三种注释:1.单行注释以//开始换行结束.2.多行注释以/*开始,以*/结束.3.说明注释以/**开始,以*/结束. 关键字 关键字:是指在程序中,Java已经定义好的单词,具有特 ...

  7. java中的集合_Java 集合介绍,常用集合类

    JAVA 集合 在处理数据的过程中经常会需要一个容器来存储某一类型的数据,Java 中的数组就是这样一种容器.但 Java 中的数组有其局限性,定义后的数组长度不可变,超出数组长度后就不能再存放数据了 ...

  8. java中循环语句_Java语法基础之循环结构语句详解

    一.循环结构 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循 ...

  9. java中set集合_java中怎么往集合类set里添加数据??

    展开全部 两种向Set中添加元素的方法,第一种是使用add()方法,每次添加一个元素到set中,当集合中不存在相32313133353236313431303231363533e59b9ee7ad94 ...

最新文章

  1. Gamma阶段第一次scrum meeting
  2. KNN(k-NearestNeighbor)
  3. 提速20倍!谷歌AI发布TensorFlow 3D
  4. 深度有趣 | 22 天马行空的DeepDream
  5. android 虚拟设备的用法
  6. 动静结合学内核:linux idle进程和init进程浅析
  7. SSL服务器配置评级指南
  8. 算法竞赛入门经典_6数据结构基础
  9. [设计模式] ------ 代理模式
  10. 【计算机科学基础】图灵机原理概述
  11. 使用Redis的理由
  12. SQLSERVER:sqlserver2008r2安装好后,自动提示功能不可以使用
  13. 我在51cto博客安家了!
  14. linux echo输出转义换行回车引号
  15. [转载] python的变量和C++的变量有什么区别
  16. HTML调用QQ临时会话
  17. 松翰单片机--SN8F5702学习笔记(一)uart寄存器
  18. conda的environment未被激活解决方案
  19. 爬虫:爬取豆果网和美食网的菜单
  20. 「易见股份」暴涨背后:炒区块链概念半年赚2亿

热门文章

  1. PHP学习之没有权限修改hosts文件
  2. ef entity转json引起的Self referencing loop
  3. net user命令详解
  4. Spring Mvc + Easyui中根据查询结果导出文件
  5. 高矮不同的人排队问题
  6. Zabbix 2.4.5 自定义 key 监控 apache
  7. 卫星定位导航行业的产业链
  8. Linux后台进程管理以及ctrl+z(挂起)、ctrl+c(中断)、ctrl+\(退出)和ctrl+d(EOF)的区别
  9. 男人一辈子就喜欢一种类型的女人,至死不渝从一而终!
  10. 定时从linux获取文件,Linux 使用scp命令定时将文件备份到另一台服务器