J2EE快速入门之集合框架【01】
目录
一、集合体系结构讲解
1、Collection顶级接口讲解
(1)概念
(2)常用方法
(3)迭代器
2、讲解List集合与其实现类
(1)可重复
(2)有序
(3)List优化
3、List实现类的不同特征
(1)对象数组结构
(2)链表结构
4、泛型
(1)JDK1.5之后以类型作为参数的类就叫泛型(2)作用:提高程序健壮性,简化代码(3)泛型的默认值是Object
5、装箱、拆箱
(1)值类型->引用类型 装箱 (2)引用类型->值类型 拆箱 (3)jdk1.5之后引入了自动装箱及自动拆箱功能
一、集合体系结构讲解
Collection├ List (有序集合,允许相同元素和null)
│ ├LinkedList (非同步,允许相同元素和null,遍历效率低插入和删除效率高)
│ ├ArrayList (非同步,允许相同元素和null,实现了动态大小的数组,遍历效率高,用的多)
│ ├Vector(同步,允许相同元素和null,效率低)
│ ├ Set (无序集合,不允许相同元素,最多有一个null元素) | └HashSet(无序集合,不允许相同元素,最多有一个null元素
1、Collection顶级接口讲解
(1)概念
①Collection是最基本的集合接口(也可以称为顶级接口)
②在Collection的实例中,有些实例允许相同的元素,有些则不允许,还有一些能内置实现排序功能,所以 根据存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系
③同时,在Java中不提供直接继承自Collection的类,Java所提供的类都是继承自Collection的“子接口”: List和Set ,但不是Map的父接口
(2)常用方法
(3)迭代器
①概念
因为Collection继承了Iterable,所以它以下的实现类也都会具备 iterator() 这个方法 ,我们可以通过这个方法来获得一个 Iterator ,也就是一个迭代器 关于迭代器中的方法,我们可以通过查看 Iterator 的源码
②方法作用
③使用步骤
④使用ArrayList来演示迭代器的使用
ArrayList<Object> cs=new ArrayList<Object>();//里氏替换原则 //向集合中添加数据 cs.add("1"); cs.add("2"); cs.add("3"); cs.add("4"); cs.add("5"); cs.add("6"); System.out.println("集合的原有长度:"+cs.size()); Iterator<Object> i = cs.iterator();//获得该集合的迭代器 while(i.hasNext()) {//判断迭代器中是否存在下一个元素 System.out.println(i.next());//指针向下移动一位,并取出对应元素(对应上图讲解) i.remove();//移除指针对应的元素 } System.out.println("集合的长度:"+cs.size());
2、讲解List集合与其实现类
Collection的子接口,这个接口所具备的特征: 可重复 , 有序
(1)可重复
在集合内部,一个元素可以出现多次,也就是在集合中可以占有多个位置
Person p=new Person(); List<Person> ls=new ArrayList<Person>(); ls.add(p); ls.add(p); ls.add(p); //说出集合的长度 size=3 //得出结论: p这个元素在集合中重复了三次,占了三个位置,这就是可重
(2)有序
List中的有序指的不是内部的元素会以某种格式排序,而是指其中的每个元素在进入集合时都是有添加顺序的 先添加的在前面,后添加的在后面,这些位置是有序的 也就是 0,1,2,3,4.... (我们称之为下标)
List<String> ls=new ArrayList<String>(); ls.add("jack"); ls.add("mary"); ls.add("eason"); //jack的下标是1 //mary的下标是2 //eason的下标是3 //add这个方法是在集合的最后一位添加元素,下标也就会随着变大 //在add的时候还可以指定当前添加的元素的位置 -> ls.add(2,"asong"); ///将 asong 放入集合的第2位 //未添加 asong 时: [jack, mary, eason] //添加了 asong 后: [jack, mary, asong, eason] //需要注意的是,指定的位置必须小于当前集合的最大下标 //同时,因为List是有序的,我们除了可以按照顺序(下标)插入之外,也可以按照顺序(下标)来读取与删除 //读取: ls.get(0),根据下标来读取的方式我们一般称为随机读取 //删除: ls.remove(0) //根据下标移除第0位 ls.remove("jack") //移除集合中的 jack ,集合中是使用equals来判断的
(3)List优化
当集合实例化的时候,默认的大小为10,我们也可以在实例化的时候调用对应的构造来创建响应的大小
因为无参实例集合的初始长度为10,当我们添加的元素超过10位的时候,集合的大小就不够了,需要扩 容 每次添加的时候,都调用grow方法判断是否需要扩容
ArrayList的扩容因子是1.5 : 原容量的0.5倍
3、List实现类的不同特征
根据数据结构的不同,List底下的实现类可以分为两种: 对象数组结构 , 链表结构
(1)对象数组结构
① 特点:基于对象数组,拥有下标,每次扩容的时候其实都是新建了一个更大的数组,然后将原有内容复 制过去
② ArrayList 增删慢,查询快,有连续下标,线程不同步(不安全),扩容因子为1.5
③ Vector 增删改查都慢,有连续下标,线程同步(安全),扩容因子为2
查看两个类中,相同方法的区别(突出线程的同步)
基于对象数组的集合最大的好处就是读取非常快,因为是随机读取,但是修改的速度比较慢,如果在项 目中遇到了需要非常频繁的对集合中的元素进行修改的操作,可以使用链表结构的集合
(2)链表结构
① Linkedlist 链表结构,增删快,查询慢,没有连续下标
② LinkList的使用
LinkedList<String> ls=new LinkedList<String>(); ls.add("jack"); ls.add("jack1"); ls.add("jack2"); ls.add("jack3"); System.out.println(ls.get(1));//jack1 //虽然我们是通过下标来取值,但是在内部,还是得从链表开头一直查,查询到链表的对应位
③LinkList特有方法
addFirst();// 添加在第一个 addLast(); //添加在最后一个 getFirst();// 得到第一个 getLast(); //得到最后一个 removeFirst();// 移除第一个 removeLast(); //移除最后一个
4、泛型
(1)JDK1.5之后以类型作为参数的类就叫泛型
(2)作用:提高程序健壮性,简化代码
(3)泛型的默认值是Object//以类型作为参数的类就称为泛型List<Integer> list = new ArrayList<Integer>();list.add(1);list.add(3);list.add(5);list.add(7);list.add(9);//获取迭代器ListIterator<Integer> listIterator = list.listIterator();while(listIterator.hasNext()) {//获取数据类型Integer num = listIterator.next();if(num%2==0) {System.out.println(num);}}
5、装箱、拆箱
(1)值类型->引用类型 装箱
(2)引用类型->值类型 拆箱
(3)jdk1.5之后引入了自动装箱及自动拆箱功能//装箱:值类型变为引用类型int a =1;Integer num = new Integer(a);//拆箱:引用类型变为值类型int b = num.intValue();
J2EE快速入门之集合框架【01】相关推荐
- J2EE快速入门之集合框架【02】
目录 一.LinkedList实现堆栈 1.实例化链表 2.压栈 3.出栈 4.计算堆栈的数量 5.实例化测试 6.结果显示: 二.Set接口下的实现类 1.HashSet (1)无序 (2)不重复 ...
- 前端_快速入门Vue.js框架
文章目录 快速入门Vue.js框架 0.前言 1.Vue.js框架 1.1.Vue简介 1.2.第一个Vue程序 1.3.el:挂载点 2.Vue指令 2.2.v-html 2.3.v-on 2.4. ...
- ADO.NET Entity Framework Beta2(五)/快速入门(实体框架)
This quickstart illustrates a series of tasks that support the topics in Getting Started with the En ...
- 快速了解Java集合框架
1. 简介 JDK1.2 引入了 Java 集合框架,包含一组数据结构.与数组不同,这些数据结构的存储空间会随着元素添加动态增加.其中,一些支持添加重复元素另一些不支持,一些支持 null,一些能自动 ...
- J2EE基础之map集合框架
目录 一.map集合框架特点 二.遍历方式 三.常用实现类HashMap 四.泛型 五.集合框架工具类( Collections和 Arrays ) 等等先别急,先了解一下什么是Map集合? Map是 ...
- J2EE 快速入门之第二章 Set集合详解
一:Collection.remove()与ArrayList.remove()方法的不同 1. Collection中只能根据元素移除 2.ArrayLi ...
- php框架快速入门,php-laravel4.0框架 简单快速入门
前提必须已经安装好了laravel4.0版本. 写入权限: 安装完 Laravel ,你还需要为web服务器设置 app/storage 目录的写入权限. 目录结构: 安装完框架后,你需要熟悉一下该项 ...
- php高性能框架phaicon,3分钟快速入门php高性能框架Phalcon
Phalcon 是什么,我们为啥要选择它?Phalcon 是开源.全功能栈.使用 C 扩展编写.针对高性能优化的 PHP 框架.开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类 ...
- MyBatis 01 快速入门
MyBatis 01 快速入门 文章目录 MyBatis 01 快速入门 一.学习目标 二.为什么需要框架技术 三.框架技术介绍 四.主流框架介绍 五.持久化与ORM 六.MyBatis简介 七.搭建 ...
- Go语言Web框架:Beego框架快速入门
文章目录 Beego框架快速入门 1.beego框架了解 2.MVC架构 3.环境搭建 4.beego的项目结构分析 5.Beego快速体验 6.Beego运行流程分析 7.Post案例实现 7.1前 ...
最新文章
- php 偷偷转移别人权重,判断百度蜘蛛偷偷进行301转移权重 给新站提权
- Java桌面程序打包成exe可执行文件
- Android开源之BaseRecyclerViewAdapterHelper(持续更新!)
- 零基础学习hadoop到上手工作线路指导(中级篇)
- Tomcat关闭失败,SEVERE: Could not contact localhost:8005. Tomcat may not be running.
- android 自定义菜单栏,GitHub - earthWo/AndroidBottomNavigation: android 底部菜单栏,自定义样式,自定义菜单数量,添加滚动动画和水波纹动画...
- IntelliJ IDEA 2017新工具
- matlab charl,基于MATLAB/Simulink的双闭环SPWM变频调速系统仿真.pdf
- 对程序员来说最难的是写代码吗?
- TIOBE 7月编程语言排行:各大城市程序员的工资状况又又又涨了
- 页面上通过地址栏传值时出现乱码的两种解决方法
- Ubuntu批量转换图片格式
- c#反编译生成DLL过程
- matlab 对数回归,对数拟合
- 一文贯穿“如何制定研究生规划、找实习、秋招”
- POJ 2706 Connect
- 软件体系结构的分析与测试,软件体系结构分析与评价,software architecture analysis and evaluation,音标,读音,翻译,英文例句,英语词典...
- erp系统的服务器如何配置,erp系统云服务器怎么配置
- 一个阅读分享的微信小程序(也可用于新闻阅读,新闻分享)(原创)
- 清理 Visual Studio 工具箱 的冗杂控件(第三方控件卸载不完全)
热门文章
- lockdir便携式文件夹加密器(单文件绿色版)
- 千方百剂医药管理系统对接第三方WMS系统(天力士物流)
- Android源码在线查看工具
- 在EnableQ创建一张问卷
- 学生党什么价位蓝牙耳机性价比高?2021这五款蓝牙耳机发烧友都爱了
- 免拆破解电信机顶盒TY1208-Z,绝对成功
- 【Protel】Protel99SE(附汉化包+SP6+增强工具+视频教程)
- 新买的笔记本电脑怎么分盘_2020年笔记本电脑选购有哪些建议和推荐?
- 解决webSocket不兼容IE浏览器问题
- Ubuntu 18.04安装i686-elf交叉编译工具链的方法