集合框架

由于数组存在大小固定、类型唯一等缺点,不能满足我们的需要,因此我们引入了集合的概念;

集合作为一直容器具有两大特点

  • 大小可变,可自由添加
  • 可以同时存储多种不同类型的数据(一般而言存储引用数据类型,当存储基本数据类型时,存储的是包装类)

集合分为两大类

  • 单列集合 Collection

  • 双列集合 Map

1. 单列集合

1.1 单列集合(Collection)

下面我们演示一下Collection的常见方法

  • 如何添加元素和其他集合
public static void addMethod() {// 创建集合对象Collection coll = new ArrayList();coll.add("元素一");coll.add(123);coll.add("元素二");System.out.println(coll);//结果 [元素一, 123, 元素二]Collection coll2 = new ArrayList();coll2.add("第二集合元素1");coll2.add(coll);System.out.println(coll2);//结果 [第二集合元素1, [元素一, 123, 元素二]]}
  • 如何删除元素和集合
public static void removeMethod() {Collection coll = new ArrayList();coll.add("马宝国");coll.add(12345);coll.add("闪电五连鞭");System.out.println("移除前" + coll);coll.remove("闪电五连鞭");//删除原色System.out.println("移除后" + coll);Collection coll2 = new ArrayList();coll2.add("王司徒");coll2.add(12345);coll2.add("闪电五连鞭");System.out.println("coll2为" + coll2);// 移除指定集合的元素,有相同的就移除,也就是移除交集coll.removeAll(coll2);System.out.println("交集移除后" + coll);System.out.println("移除发生后的coll2" + coll2);//可以发现在coll中删除和coll2的交集不影响coll2// 清空集合coll.clear();System.out.println("清空后的集合:" + coll);// 判断集合是否为空 isEmpty()System.out.println(coll.isEmpty());
}结果:
移除前[马宝国, 12345, 闪电五连鞭]
移除后[马宝国, 12345]
coll2为[王司徒, 12345, 闪电五连鞭]
交集移除后[马宝国]
移除发生后的coll2[王司徒, 12345, 闪电五连鞭]
清空后的集合:[]
true
  • 包含关系
public static void judgeMethod() {Collection coll = new ArrayList();coll.add("马宝国");coll.add(12345);coll.add("闪电五连鞭");System.out.println("初始的" + coll);//判断是否包含元素 12345System.out.println(coll.contains(12345));Collection coll2 = new ArrayList();coll2.add("马宝国");coll2.add(12345);//.containsAll 判断coll是否包含coll2System.out.println(coll.containsAll(coll2));//.size()输出集合元素个数System.out.println(coll.size());
}//结果:
初始的[马宝国, 12345, 闪电五连鞭]
true
true
3
  • 如何将集合转为数组
Object[] objs = coll.toArray();// 不管啥类型,都是object类型
System.out.println(objs);// 这是个一般对象,代表整个数组,所有输出的是对象for (int i = 0; i < objs.length; i++) {System.out.println(objs[i]);}
  • 迭代器和遍历
public static void iteratorMethod() {Collection coll = new ArrayList();coll.add("马宝国");coll.add(12345);coll.add("闪电五连鞭");// 先创建,再遍历取值Iterator it = coll.iterator();// hasNext()判断是否有下一个元素存在,如果存在就可以通过next()来获取;不存再hasNext()返回falsewhile (it.hasNext()) { System.out.println(it.next());}// 组合使用,如果是字符串就输出其长度while (it.hasNext()) { Object objs =it.next();//因为it.next(),出现一次就取一次值,所有用一个对象装一下 if(objs instanceof String) {String str = (String)objs; System.out.println(str.length()); } } // 组合使用,当数据类型为Integer的时候删除该元素while (it.hasNext()) {if (it.next() instanceof Integer) {it.remove();}}}

1.2 list接口

List作为Collection的两大子类之一,是一种允许重复的集合,其顺序也就是输入和输出的顺序。

List中常用的子类有两个:

ArrayList:底层维护的是一个数组数据结构,查询快,增删慢

LinkedList:底层维护的是一个链表数据结构,增删快、查询慢

如何选择?

如果查询多就用ArrayList,如果增删多就用LinkedList,如果不知道就选ArrayList,因为往往查询比增删需求多

代码实例

public static void listIteratorMethod() {List list = new ArrayList();//添加元素list.add("金酒");list.add("龙舌兰酒");list.add("伏特加");list.add("威士忌");list.add(2, "白兰地");System.out.println("list1" + list);// [金酒, 龙舌兰酒, 白兰地, 伏特加, 威士忌]List list2 = new ArrayList();list2.add("茅台");list2.add("五粮液");list2.add("汾酒");System.out.println("list2" + list2);// list2[茅台, 五粮液, 汾酒]list.addAll(2, list2);//从下标2开始添加入list2System.out.println("添加后" + list);// 添加后[金酒, 龙舌兰酒, 茅台, 五粮液, 汾酒, 白兰地, 伏特加, 威士忌]//通过下标删除元素list.remove(1); //通过下标删除集合list.removeAll(list2);//通过下标获取元素list.get(2)
}

注意:list中由于指针的存在,可以利用指针在正反两个方向上查找元素

public static void listIteratorMethod() {List list = new ArrayList();list.add("金酒");list.add("龙舌兰酒");list.add("伏特加");list.add("威士忌");ListIterator listIt = list.listIterator();//正向System.out.println("下一个:" + listIt.next());// 下一个:金酒System.out.println("下一个:" + listIt.next());// 下一个:龙舌兰酒System.out.println("下一个:" + listIt.next());// 下一个:伏特加System.out.println("下一个:" + listIt.next());// 下一个:威士忌//反向System.out.println("上一个:" + listIt.previous());// 上一个:威士忌System.out.println("上一个:" + listIt.previous());// 上一个:伏特加System.out.println("上一个:" + listIt.previous());// 上一个:龙舌兰酒System.out.println("上一个:" + listIt.previous());// 上一个:金酒
}

例子结论:list是可以以正反两种方向遍历的,但是注意观察结果,因为指针的改变,当第一个listIt.previous()开始运行的时候,指针已经在最后了,如果你在第一行写listIt.previous(),会直接报错

Java新人之路 -- 集合(上)相关推荐

  1. 《java 进阶之路》 上--推荐书籍

    整整一月没有更新博客了,因为十月份和双十一新入手的6本技术相关的书,这个月看完了3本,后面的3本还得慢慢肯. 下面我就介绍下进阶高级工程师必须也是我自己都看的一些书和知识点. 1.深入理解Java虚拟 ...

  2. java学习之路8——Java集合框架

    一.什么是集合 概念:对象的容器,定义了对多个对象进行操作的常用方法.可以实现数组的功能. 和数组区别: (1)数组长度固定,集合长度不固定 (2)数组可以存储基本类型和引用类型,集合只能存储引用类型 ...

  3. 零基础 Java 自学之路(2021年最新版)

    前言 无论你是否想自学 Java,认真看完本文,你以后的职场生涯至少少走1年弯路. 本文会持续更新,建议收藏. 初衷 在 CSDN 上经常有同学私聊我询问 "如何自学 Java". ...

  4. java定义list_我的Java Web之路59 - Java中的泛型

    本系列文章旨在记录和总结自己在Java Web开发之路上的知识点.经验.问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人. 目录 介绍 再谈Java中的类型 为什么需要泛型? J ...

  5. 我的Java自学之路,java高级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  6. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应 ...

  7. 萌新的java学习之路——第一周

    萌新的java学习之路--第一周 第一周的学习 这是我学习Java的第一周,写这个博客更多的时为了总结自己这一周的学习情况,如果有人看到我写的博客,有什么问题的话,可以问我.虽然我也是一个小白,但我会 ...

  8. java核心编程(集合、io、反射等)

    学习总览: 一.集合 1.Collection 1.1 Collection接口 集合: 存储数据的容器(数据结构) Collection:是一个接口,定义了操作集合相关方法 Collection下有 ...

  9. JavaSE部分(集合上)

    集合上(Collection Iterator 泛型) 写在前面:分享技术,共同进步,把写的笔记搬运至博客,有不足请见谅,相关意见可评论告知 ╰( ̄ω ̄o) 编程路漫漫,学习无止尽! 文章目录 集合上 ...

最新文章

  1. 如何使用C#在ASP.NET Core中轻松实现QRCoder
  2. tcp 的ack, seq
  3. java synchronized关键字_Java:手把手教你全面学习神秘的Synchronized关键字
  4. RocketMQ API使用简介、拉取机制
  5. iis服务器显示http1.1,IIS服务器“500”内部错误 HTTP/1.1 新建会话失败
  6. springboot怎么杀进程_全新Steam在线游戏 Among us太空狼人杀攻略
  7. 常见的锁策略、synchronized中的锁优化机制
  8. 2018.12.26 作业
  9. 图灵机器人调用数据恢复_python:用itchat打造属于自己的微信聊天机器人,24小时运行...
  10. Java知识系统回顾整理01基础01第一个程序05Eclipse中运行Java程序
  11. 生产任务单下推产品入库单,金蝶KIS旗舰版盘点机PDA生产管理软件
  12. webstrom 常用的快捷键
  13. 拟物化设计与扁平化设计
  14. linux查看pci设备枚举,Linux 枚举PCI设备
  15. 重量级ORM框架--持久化框架Hibernate【关系映射详解】
  16. 百丽时尚赴港IPO,持续释放品牌年轻化活力
  17. FinalCutPro快捷键
  18. 电脑W ndoWs在哪里,苹果电脑如何安装wndows系统.doc
  19. 设置css手机屏幕 media all,手机屏幕自适应之css写法@media
  20. 密码算法测试向量——AES

热门文章

  1. 解决AndroidStudio编译时报错:org.gradle.api.ProjectConfigurationException;编译报错Read Time out
  2. 谷歌浏览器无法保存网站密码指引
  3. Android Security
  4. 费城交响乐团将于5月16日至28日开启2019年中国巡演之旅
  5. 【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)
  6. 如何提高iPhone和iPad上语音备忘录的音质
  7. educoder算法设计与分析 实验五回溯法
  8. 荣耀v40轻奢版鸿蒙系统,差异化的生存策略:荣耀V40轻奢版有点东西
  9. MIT2020年力作:机器学习加速器综述
  10. 大数据 机器学习 分类算法_13种用于数据科学的机器学习分类算法及其代码