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

   在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。
 
   如果使用过了集合对象改变集合中元素个数那么就会出现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. [DllImport("kernel32.dll")]

    这叫引入kernel32.dll这个动态连接库. 这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数,就需要这么引入.举个例子: [DllImport("kerne ...

  2. Day7 - J - Raising Modulo Numbers POJ - 1995

    People are different. Some secretly read magazines full of interesting girls' pictures, others creat ...

  3. C语言循环

    C 练习实例1 #include<stdio.h> int main() { int i,j,k; printf("\n"); //此处巧妙的利用循环次数和四个相等的关 ...

  4. 007、Java中定义int型变量

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

  5. 017.CI4框架CodeIgniter数据库操作之:Updata更新修改一条数据

    01. 在Model中写入数据库操作的代码如下: <?php namespace App\Models\System; use CodeIgniter\Model; class User_mod ...

  6. Win7安装Oracle Instantclient ODBC驱动 后配置DSN时出错的解决办法 SQORAS32

    安装过程简述 oracle官网下载了 instantclient-odbc-nt--.zip instantclient-basic-nt-.zip 我这是32位版的win7,按照需要下载对应的版本. ...

  7. log4j配置文件——hibernate

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j ...

  8. UVA - 548 Tree(二叉树的递归遍历)

    题意:已知中序后序序列,求一个叶子到根路径上权和最小,如果多解,则叶子权值尽量小. 分析:已知中序后序建树,再dfs求从根到各叶子的权和比较大小 #include<cstdio> #inc ...

  9. centos7上安装mysql8

    话不多说仍然是更换虚拟机的系列安装. 一.首先下载最先版的mysql.到官网下载https://dev.mysql.com/downloads/file/?id=477146 下载后上传linux到相 ...

  10. 根据上传的MultipartFile通过springboot转化为File类型并调用通过File文件流的方法上传特定服务器

      @PostMapping("uploadExcel") public ResponseObj uploadExcel(@RequestParam("excelFile ...