集合的由来

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

  • 容器长度不确定
  • 能自动排序
  • 存储以键值对方式的数据

如果遇到这样的情况,数组就比较难满足了,所以也就有了一种与数组类似的数据结构——集合类。即集合是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<K,V>

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<objs.length;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<objs.length;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------------------------------------

参考资料

1-集合总体大纲

转载于:https://www.cnblogs.com/wujiadong2014/p/6012738.html

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

  1. java基础之集合类

    一.Java集合类是什么?java集合类型主要有哪些? 首先看一张概念图,这里囊括了集合类的大部分关系及内容 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中 ...

  2. Java基础-各种集合类的特性简介

    各种集合类的特性简介 集合类概述 集合中存储什么 不同集合对应不同数据结构 集合继承结构及特性简介 Map集合继承结构及特性简介 总结: 集合类概述 什么是集合?有什么用? 数组其实就是一个集合,集合 ...

  3. Java基础知识——集合类

    工具类:Collection和Map,两者是同一级别的 知识点: expectedModCount ArrayList:懒加载,transient,System.arraycopy() LinkedL ...

  4. Java工程师 Java基础面试题集合类(Day06)

    1 Java中有哪些容器(集合类)? 参考答案 Java中的集合类主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接口,分别是Set.List.Queu ...

  5. 夯实Java基础系列19:一文搞懂Java集合类框架,以及常见面试题

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  6. Java工程师成神之路java基础知识之集合类(二)

    Java 8中Map相关的红黑树的引用背景.原理等 HashMap的容量.扩容 很多人在通过阅读源码的方式学习Java,这是个很好的方式.而JDK的源码自然是首选.在JDK的众多类中,我觉得HashM ...

  7. java基础语法-day31回顾集合类、I/O流

    p716 回顾list集合需要掌握什么 ArrayList package com.bjpowernode.day24.review;import java.util.ArrayList; impor ...

  8. 简单的介绍一下怎样如何学习Java基础

    在我看来,学习Java最好的方式就是通过书籍(或博客)+动手写代码,辅以视频,通过多写多练,达到熟练掌握的程度.博主曾经看过一篇文章,讲的是费曼学习法,其中讲到学习的四个步骤:选择目标.教学.纠错学习 ...

  9. java 多态判断非空_跳槽涨薪季面试题之java基础(一)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] 为迎接金九银十跳槽涨薪季,小编汇总了java精编版面试题,大概从java基础.java8特性.多线程.spring.springboot. ...

  10. 【转】Java基础知识整理

    本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...

最新文章

  1. TCP/IP 计算机网络协议
  2. 人体上身各部位图_【肝货】画好人体结构,你还需要了解这些
  3. cctype,string,vector
  4. SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)
  5. ssl提高组周二备考赛【2018.10.30】
  6. C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
  7. linux的常用操作——lftp、nfs、ssh和scp
  8. java并发编程(二)多个线程多个锁
  9. 测试触发器有没有用_用30道电子工程师面试题来拷问堕落的假期...
  10. OO4O的session残留问题
  11. 报错:/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.29.5/UITableView.m:7943解决方法
  12. 基于CarMaker的C-NCAP主动安全系统试验仿真(一)
  13. avr单片机流水灯程序c语言,AVR单片机综合流水灯C程序
  14. 回答几个很多人在问的问题,以及苏生不惑提供的服务
  15. @所有人 “兔”个福气!飞桨兔年主题限量红包封面来咯,还有超多心动礼品等你来...
  16. epoll使用详解:epoll_create、epoll_ctl、epoll_wait、close
  17. wwdc2019_wwdc 20愿望清单
  18. VUE项目中如何实现表格数据的懒加载
  19. Apple ID怎么授权电脑
  20. Python黑客入门:暴力破解zip,零基础也可以学会

热门文章

  1. 用python实现(1.求输入的百倍,十位,个位数;2.输入a,b和ab间夹角,计算c边长;3.计算两点间曼哈顿距离;4.计算给定数据的几何平均数;5.计算向量的L1和L2范数)
  2. HTML出现jQuery.Deferred exception: undefined is not a function,已解决
  3. 20210224:力扣第229周周赛
  4. can是什么时候处于显性_CAN总线边沿时间标准是什么?
  5. request.getcontextPath() 理解
  6. VB 判断当前是否连接网络API实现
  7. 宝宝退烧的天然方子(老中医的推荐)
  8. XP共享拒绝访问,全面解决
  9. SpringBoot实战(十):统一异常处理
  10. 这样的极客大会千万别停!如今中国太需要为技术传道、为极客正名