迭代器在变量元素的时候要注意事项:

   在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。
 
   如果使用过了集合对象改变集合中元素个数那么就会出现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原理和方法和迭代器注意事项的更多相关文章

  1. java学习笔记20(Arraylist复习,Collection接口方法,迭代器,增强型for循环)

    集合:集合是Java提供的一种容器,可以用来存储多个数据: 集合与数组的区别:集合的长度是可变的,数组的长度是固定的 集合中存储的数据必须是引用类型数据: ArrayList回顾: public cl ...

  2. 从list引用调用arraylist和linkedlist对象的方法了解多态

    一.前言 今天和朋友在写代码时突然发现List<object>  list=new ArrayList<object>()中,前面是通过List引用来调用其子类ArrayLis ...

  3. java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类

    口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...

  4. 什么情况用ArrayList or LinkedList呢?

    ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类.ArrayList 和 LinkedList 都实现 List 接口.先对List做一个简单的了解: ...

  5. Java中ArrayList和LinkedList的异同

    一:ArrayList和LinkedList的大致区别如下: 1.ArrayList是实现了基于动态数组的数据结构,ArrayList实现了长度可变的数组,在内存中分配连续的空间.遍历元素和随机访问元 ...

  6. Java集合之ArrayList和LinkedList的实现原理以及Iterator详解

    ArrayList实现可变数组的原理: 当元素超出数组内容,会产生一个新数组,将原来数组的数据复制到新数组中,再将新的元素添加到新数组中. ArrayList:是按照原数组的50%来延长,构造一个初始 ...

  7. 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结

    List (链表|线性表) 特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素 1.创建一个用指定可视行数初始化的新滚动列表.默认情况下,不允许进行多项选择. ...

  8. 二.LinkedList原理及实现学习总结

    一.LinkedList实现原理概述 LinkedList 和 ArrayList 一样,都实现了 List 接口,但其内部的数据结构有本质的不同.LinkedList 是基于链表实现的(通过名字也能 ...

  9. Java集合:ArrayList的实现原理

    Java集合---ArrayList的实现原理   目录: 一. ArrayList概述 二. ArrayList的实现 1) 私有属性 2) 构造方法 3) 元素存储 4) 元素读取 5) 元素删除 ...

随机推荐

  1. Redis之datatype概述

    Redis支持的数据类型     String     List    Set    Sorted Set    Hashes    Bit array    HyperLogLog     Bina ...

  2. greenplum 导入数据方式

    参考: http://gpdb.docs.pivotal.io/4390/admin_guide/load/topics/g-working-with-file-based-ext-tables.ht ...

  3. JVM配合IDEA远程调试

    前言 如果测试环境中运行的jar包项目报错,需要排错时,会不太方便,这个时候就可以通过远程调试的方式,在本地打断点的方式进行调试 正文 一.首先,运行测试环境的jar包需要加以下参数: java -j ...

  4. [Codeforces]1263C Everyone is a Winner!

    题目 On the well-known testing system MathForces, a draw of nnn rating units is arranged. The rating w ...

  5. 006、Java中定义中文变量中文标识符

    01.代码如下 package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  6. Quartz 调用

    讲解 在线Cron表达式 调用(DLL下载) static void Main(string[] args) { //1.任务调度调用 //开启任务,操作数据,然后将数据广播给指定用户 //Cron表 ...

  7. lpwizard 生成的 allegro 封装中 .psx 文件使用方法。

    lpwizard 有时候生成 allegro 封装的时候会生成 .psx 文件,这个文件其实是脚本文件,用于某些特殊形状焊盘的处理. 具体的使用方法如下: 在Allegro中,选择 File > ...

  8. MQTT 协议学习:008-在STM32上移植MQTT

    前言 通过前面了解MQTT有关概念.分析了有关的报文,我们对于这个协议也有了更深的认识.但纸上谈来终觉浅,绝知此事要躬行. 本文参考:<STM32+W5500+MQTT+Android实现远程数 ...

  9. ArcoLinux美化教程

    ArcoLinux美化教程 1. 前言 ArcoLinux已经足够美观,这里主要是讲解如何配置桌面特效 2. 安装compiz $ yay -S compiz 3. 用compiz替换xfwm4 编辑 ...

  10. LeetCode题解汇总(包括剑指Offer和程序员面试金典,持续更新)

    LeetCode题解汇总(持续更新,并将逐步迁移到本博客列表中) LeetCode题解分类汇总(包括剑指Offer和程序员面试金典) 剑指Offer 序号 题目 难度 03 数组中重复的数字 简单 0 ...