Day 5 :ArrayList原理、LinkedList原理和方法和迭代器注意事项
迭代器在变量元素的时候要注意事项:
在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。
如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。
迭代元素的过程中:
迭代器创建到使用结束的时间。
------意识是迭代器一旦创建,在之后是不可以用集合操作元素的。如果用了后再调用迭代器是报错的。
//错误代码段
List list = new ArrayList();//创建集合
list.add("李杰");
list.add("李英");
list.add("李汉三");
ListIterator it = list.listIterator(); //获取到迭代器
list.add("Ha");
it.next();

//正确代码段
List list = new ArrayList();//创建集合
list.add("李杰");
list.add("李英");
list.add("李汉三");
ListIterator it = list.listIterator(); //获取到迭代器
it.next();
list.add("Ha");

ArrayList

笔试题目:使用ArrayList无参的构造函数创建一个 对象时, 默认的容量是多少? 如果长度不够使用时又自增增长多少?
ArrayList底层是维护了一个Object数组实现的,使用无参构造函数时,Object数组默认的容量是10,当长度不够需要比较所需要的最小长度和Object数组长度,当Object数组长度不够时,自动增长0.5倍。如果(所需要的最小长度-增长后的数组长度>0,那么将所需要的最小长度作为新长度赋值给Object数组长度)
ArrayList底层是维护了一个Object数组实现的
特点: 查询速度快,增删慢。
因为数组中的数据是连续的如果删除或增加就会导致缺失或者多一位数据,当数据量大的时候就会需要使用复制进行移动位置或者移动到更加大的数组空间,就会特别慢
ArrayList 特有的方法:
ensureCapacity(int minCapaci上ty)//制定
trimToSize()
什么时候使用ArrayList: 如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList存储这批数据。
作业: 编写一个函数清除集合中重复元素。图书管理为例如果书号是一样就视为重复元素。
要求: 遍历集合元素的时候必须使用迭代器。 迭代器
import java.util.*;
class book{
int id;
String name;
public book(int id,String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj) {
book v = (book)obj;
return this.id==v.id;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "{"+"编号"+id+",书名"+name+"}";
}
}
public class Demo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new book(110,"java web"));
list.add(new book(120,"java"));
list.add(new book(119,"c++"));
list.add(new book(110,"c#"));
ArrayList list1 = clearRe_element(list);
System.out.println(list1);
}
private static ArrayList clearRe_element(ArrayList list) {
ArrayList list2 = new ArrayList();
Iterator it =list.iterator();
while(it.hasNext()) {
book a = (book)it.next();
if(!list2.contains(a)) {
list2.add(a);
}
}
return list2;
}
}
LinkedList
LinkedList底层是使用了链表数据结构实现的
特点: 查询速度慢,增删快。
Linkedlist特有的方法:
1:方法介绍
addFirst(E e)
addLast(E e)
getFirst()
getLast()
removeFirst()
removeLast()
2:数据结构
栈 : 主要是用于实现堆栈数据结构的存储方式。
先进后出
push()
pop()
队列(双端队列): 主要是为了让你们可以使用LinkedList模拟队列数据结构的存储方式。
先进先出
offer()
poll()
返回逆序的迭代器对象
descendingIterator() 返回逆序的迭代器对象
import java.util.*;
public class Demo2 { public static void main(String[] args) {
LinkedList list= new LinkedList();
list.add("李杰");
list.add("李英");
list.add("李汉三");
/*
list.addFirst("李道杰"); //把元素添加到集合的首位置上。
list.addLast("杰仔"); //把元素添加到集合的末尾处。 System.out.println(list.getFirst());//获取集合中首位置的元素
System.out.println(list.getLast());//获取集合中末尾的元素 System.out.println(list.removeFirst());//删除集合中的首位置元素并返回
System.out.println(list.removeLast());//删除集合中的末尾素并返回 list.push("英子"); //将该元素插入此集合的开头处。
System.out.println(list.pop()); // 移除并返回集合中的第一个元素 list.offer("哈哈哈");//将该元素插入此集合的开头处
System.out.println(list.poll());//删除集合的首元素 System.out.println(list);
*/
Iterator it = list.descendingIterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
题目: 使用LinkedList实现堆栈数据结构的存储方式与队列的数据结构存储方式
import java.util.*;
//模拟栈的存储方式pop();push();
class StackList{
LinkedList list = new LinkedList();
//进栈
public void add(Object o){
list.push(o);
}
//弹栈 : 把元素删除并返回
public Object pop(){
return list.pop();
}
//获取元素个数
public int size(){
return list.size();
}
} //模拟队列的存储方式poll();offer(o);
class TeamList{
LinkedList list = new LinkedList();
//进入队列
public void add(Object o){
list.offer(o);
}
//移除队列
public Object remove(){
return list.poll();
}
//获取元素个数
public int size(){
return list.size();
}
} public class Demo3 { public static void main(String[] args) { StackList list = new StackList();
list.add("李杰");
list.add("李英");
list.add("李汉三"); int size = list.size();
for(int i = 0 ; i<size ; i++){
System.out.println(list.pop());
} TeamList list1= new TeamList();
list.add("李杰");
list.add("李英");
list.add("李汉三"); int size1 = list.size();
for(int i = 0 ; i<size ; i++){
System.out.println(list1.remove());
}
}
}
Day 5 :ArrayList原理、LinkedList原理和方法和迭代器注意事项的更多相关文章
- java学习笔记20(Arraylist复习,Collection接口方法,迭代器,增强型for循环)
集合:集合是Java提供的一种容器,可以用来存储多个数据: 集合与数组的区别:集合的长度是可变的,数组的长度是固定的 集合中存储的数据必须是引用类型数据: ArrayList回顾: public cl ...
- 从list引用调用arraylist和linkedlist对象的方法了解多态
一.前言 今天和朋友在写代码时突然发现List<object> list=new ArrayList<object>()中,前面是通过List引用来调用其子类ArrayLis ...
- java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类
口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...
- 什么情况用ArrayList or LinkedList呢?
ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类.ArrayList 和 LinkedList 都实现 List 接口.先对List做一个简单的了解: ...
- Java中ArrayList和LinkedList的异同
一:ArrayList和LinkedList的大致区别如下: 1.ArrayList是实现了基于动态数组的数据结构,ArrayList实现了长度可变的数组,在内存中分配连续的空间.遍历元素和随机访问元 ...
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
ArrayList实现可变数组的原理: 当元素超出数组内容,会产生一个新数组,将原来数组的数据复制到新数组中,再将新的元素添加到新数组中. ArrayList:是按照原数组的50%来延长,构造一个初始 ...
- 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结
List (链表|线性表) 特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素 1.创建一个用指定可视行数初始化的新滚动列表.默认情况下,不允许进行多项选择. ...
- 二.LinkedList原理及实现学习总结
一.LinkedList实现原理概述 LinkedList 和 ArrayList 一样,都实现了 List 接口,但其内部的数据结构有本质的不同.LinkedList 是基于链表实现的(通过名字也能 ...
- Java集合:ArrayList的实现原理
Java集合---ArrayList的实现原理 目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除 ...
随机推荐
- bzoj 1138: [POI2009]Baj 最短回文路
额,,貌似网上的题解都说超时之类的. 然而我这个辣鸡在做的时候不知道在想什么,连超时的都不会. 超时的大概是这样的,f[x][y]表示x到y的最短回文路,然后更新的话就是 f[x][y]更新到 f[a ...
- 0108 spring的申明式事务
背景 互联网的金融和电商行业,最关注数据库事务. 业务核心 说明 金融行业-金融产品金额 不允许发生错误 电商行业-商品交易金额,商品库存 不允许发生错误 面临的难点: 高并发下保证: 数据一致性,高 ...
- 图片与byte相互转换
一.图片转byte public byte[] ImageToByte() { string imagefile = @"http://192.168.0.212/pass/T-1.jpg& ...
- cmd命令打开本地*.db数据文件的一些坑
昨天刚看了下sqlite数据库,用的是cmd窗口 写的,建了几个表,今天在次打开,发现.问题有点小多啊.. 我也不知道我的数据库名字后面为啥会带 (“ : ”) 下面是我的数据文件: 刚开始看了下, ...
- NFS挂载共享文件夹
修改rcS启动脚本,使开发板初始化完成,自动挂载共享文件夹 修改开发板ip,使之与虚拟机处于同一网段(二者可以互ping) 挂载虚拟机的共享文件夹 rcS 1 ifconfig eth ...
- POJ 3077 : Rounders
Rounders Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7827 Accepted: 5062 Description ...
- [YOLO]《You Only Look Once: Unified, Real-Time Object Detection》笔记
一.简单介绍 目标检测(Objection Detection)算是计算机视觉任务中比较常见的一个任务,该任务主要是对图像中特定的目标进行定位,通常是由一个矩形框来框出目标. 在深度学习CNN之前,传 ...
- bzoj 1912: [Apio2010]patrol 巡逻
呵呵呵呵呵呵,自己画图,大概半个小时,觉的连上边会成环(是不是该交仙人掌了??)然后求环不重合部分最大就好了, 结果写了一坨DP,最后写不下去了,再次扒了题解. 发现我真的是个sb. k==1,直接是 ...
- 139-PHP static后期静态绑定(二)
<?php class test{ //创建test类 public function __construct(){ static::getinfo(); //后期静态绑定 } public s ...
- Lombok认知
Lombok的简介 Lombok是一款Java开发插件,公司项目到处使用,整体效果很棒,代码更干净.Java开发人员可以节省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型 ...