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());
        }    
    }
}

猜你喜欢

转载自www.cnblogs.com/JYDesigner/p/9346323.html