【java】兴唐第二十一节(LinkedList和泛型)
LinkedList知识点
1、实现了Iterable接口的类具有迭代功能。
2、List接口为Collection的子类,表示线形数据列表,其实现类有:ArrayList(数组线性表)与LinkedList(链表)
算了不多说了,上图吧
3、ArrayList是一个可变数组(当存储数据长度大于当前数组长度时,会重新声明一个数组,将原来的数据拷贝过来。)
4、LinkedList的第一个元素的Pre值一定为nell ,可以用来判断是不是第一个元素
5、ArrayList元素地址是连续的,LinkedList的地址不连续。
6、ArrayList是数组的线性的数据结构,使用连续的内存单元存储数据元素,对元素的遍历速度比较快LinkedList在遍历集合元素方面比较慢,因为需要寻找下一个元素的地址。
LinkedList是双向链表数据结构,前一个元素储存了后一个元素的地址,后一个元素记录了前一个元素的地址。当添加过删除元素时比较快。因为ArrayList需要移动删除或添加元素后的所有元素。
7、留下的疑问:什么是线程安全?等到讲完多线程后再来做补充,使用多线程的目的是为了使程序跑的更快一点
7、Linkedlist删除元素时直接将要删除元素的前一个元素的next指向要删除元素后一个元的pre即可。
8、向指定位置添加元素
代码实现
stus.add(1, "孙悟空");
9、迭代器的使用
(1)如果只是打印的话则不需要将数据转为字符串的形式
代码实现:
Iterator iter = stus.iterator();while(iter.hasNext()) {System.out.println("====>" + iter);}
(2)如果想对数据进行处理,则需要将数据转化为String类型,有两种方法
方法一:
代码实现:
Iterator iter = stus.iterator();while(iter.hasNext()) {String n = (String) iter.next();System.out.println("=====>" + n); }
方法二:
代码实现:
Iterator iter = stus.iterator();while(iter.hasNext()) {String n = iter.next() + "";System.out.println("====>" + n);}
注:任何的对象和字符串拼接都会变成字符串
10、LinkedList新增的方法
LinkedList除了实现List提供的抽象方法外,还增加了一些方法:
- void addFirst(Object o) 将指定数据元素插入此集合的开头,原来元素(如果有)后移;
- void addLast(Object o) 将指定数据元素插入此集合的结尾
- Object getFirst() 返回此集合的第一个数据元素
- Object getLast() 返回此集合的最后一个数据元素
- Object removeFirst() 移除并返回集合表的第一个数据元素
- Object removeLast() 移除并返回集合表的最后一个数据元素
新增的六个方法都要记住
泛型
1、实例化对象时的用法
代码实现:
List<Student> list = new ArrayList<Student>();
2、引用类型
例:
list.add(stu);
stu.setStuNo("2019");
list.add(stu);
由于add的两个stu地址相同,所以打印时输出的内容是一样的。
LinkedList的源码分析
1、
public class ArrayList<E>
E指的是元素,表示ArrayList盛放元素的类型
2、最后一个元素如果为null则说明该集合是空的。
小作业:将LinkFirst和LinkList自己写一下
ArrayList的源码分析
1、其中有一个有参的构造方法
public ArrayList(int initialCapacity)
很重要!因为它可以在实例化ArrayList时指定默认的长度。(无参的构造方法初始化一个长度为10的数组(默认值为10)数组)
避免一些不必要的空间扩容和元素复制。
public ArrayList(Collection<? extends E> c)
2、以上代码 中?部分表示的是表示的输入的类型必须为ArrrayList的类或其子类,作用是将集合中的元素添加到新new的ArrayList当中。
3、疑问:这一步干什么用的?
if (elementData.getClass() != Object[].class)
【java】兴唐第二十一节(LinkedList和泛型)相关推荐
- Python编程基础:第二十一节 函数返回Return
第二十一节 函数返回Return 前言 实践 前言 编程往往是用于实现某种计算并将计算结果进行返回,例如我们定义了一个函数用于计算两个数的和,那么最终的目的是将计算结果返回给用户.所以我们这里要进一步 ...
- 大白话5分钟带你走进人工智能 - 第二十一节 牛顿法和L-BFGS求函数最优解
第二十一节 牛顿法和L-BFGS求函数最优解 这一节中,我们讲解一个新的求函数最优化的方法就是L-BFGS.以下是本节目录. 目录 1-L-BFGS算法简介 2-牛顿法求根 ...
- 【java】兴唐第二十节课(Collection 和 ArrayList)
(一)Collection 1.如果实现 --able 名称的接口则证明该类或其子类有该功能 (1)实现Iterable接口代表具有迭代功能 (2)实现Cloneable接口代表具有克隆功能 (3)实 ...
- Scala入门到精通——第二十一节 类型参数(三)-协变与逆变
本节主要内容 协变 逆变 类型通匹符 1. 协变 协变定义形式如:trait List[+T] {} .当类型S是类型A的子类型时,则List[S]也可以认为是List[A}的子类型,即List[S] ...
- 【数据库】兴唐第二十七节课之jdbc的使用
使用jdbc修改数据库表中的信息 package java27practice;import java.sql.Connection; import java.sql.DriverManager; i ...
- 第二十一节:ADO层次上的海量数据处理方案(SqlBulkCopy类插入和更新)
一. 简介 1. 背景: 虽然前面EF的扩展插件Z.EntityFramework.Extensions,性能很快,而且也很方便,但是该插件要收费,使用免费版本的话,需要定期更新,如果不更新,将失效, ...
- 【数据库】 兴唐第二十七节课只sql注入
首先来一个用户登录程序 public static void login(String username, String password) {Connection conn = null;State ...
- 第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)...
一维数组:1:/*数组:1. 数组是一种引用类型2. 数组是一种简单的数据结构,线性的机构3. 数组是一个容器,可以用来存储其他元素,4. 数组也是可以存储任意数据类型的元素5. 数组分为:一维数组, ...
- 重学java基础第二十一课:编译型和解释型
最新文章
- SQL 修改排序规则的问题 sql_latin1_general_cp1_ci_as
- 盘点谷歌、Facebook和IBM的重磅AI项目
- 求1 2 3 java_求1+2+3+...+n,Java代码实现
- 算法的优缺点_各种电磁仿真算法的优缺点和适用范围(FDTD, FEM和MOM等)
- native react 更新机制_React Native 热更新实现(客户端 + 服务器端)
- Go基础-Go中的Println和Print和Printf之间的区别
- python网络安全宣传周_基于Python的IA分布式系统_吴芳
- Python max函数中key的用法
- 中国工业管理软件如何突围?
- 【书籍学习】MATLAB书籍\【chinapub】matlab教程一套电子书
- spring aop记录操作日志和错误日志
- 苹果的名字测试软件,教你iOS12人脸识别测颜值捷径安装使用教程及iPhone XR修改AppleID姓名教程...
- access的否定形式_雅思考试对于新手有多难?
- 哈佛专家推荐5种最健康食物
- Tensorflow C++接口部署python深度学习训练模型
- TiDB 在北京银行交易场景中的应用实践
- php substr 中文_php substr中文截取乱码解决办法
- 微信小程序返回上一页 没有上一页的情况下返回首页
- maven 国内源配置
- Axure 8.0 授权码
热门文章
- Blender三维建模和动画风格化的东方场景视频教程
- C语言网络编程:UDP通信实现
- Navicat新建查询快捷键
- from selenium.webdriver.support.ui import Select
- [LeetCode 120] - 三角形(Triangle)
- 判断dataset是否为空
- C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】
- 【OpenCV 】反向投影
- 深入理解PHP之OpCode
- PHP--isset()和unset()函数的用法