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) 元素删除 ...
随机推荐
- Problem A: Assembly Required K路归并
Problem A: Assembly Required Princess Lucy broke her old reading lamp, and needs a new one. The cast ...
- Golang函数-递归函数
Golang函数-递归函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 外网如何访问 Service?【转】
除了 Cluster 内部可以访问 Service,很多情况我们也希望应用的 Service 能够暴露给 Cluster 外部.Kubernetes 提供了多种类型的 Service,默认是 Clus ...
- 【微信小程序】数组操作
Page({ data: { list:[{ id:1, name:'应季鲜果', count:1 },{ id:2, name:'精致糕点', count:6 },{ id:3, name:'全球美 ...
- windows清理命令
总是有一些设备需要清理,第三方的软件有不可以安装,那么,就需要这两条命令来做: cleanmgr /sageset:99 #设置要被清理的东西 cleanmgr /sagerun:99 #执行清理操作 ...
- 015、Java中定义变量时不设置内容,使用变量前设置内容
01.代码如下 package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- Spark Scheduler 模块(下)
Scheduler 模块中最重要的两个类是 DAGScheduler 和 TaskScheduler.上篇讲了 DAGScheduler,这篇讲 TaskScheduler. TaskSchedule ...
- 数据结构——Java Stack 类
定义 栈是Vector的一个子类,它实现了一个标准的后进先出的栈.堆栈只定义了默认构造函数,用来创建一个空栈. 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法. 图例 在下面图片中可 ...
- 基于Hadoop3.1.2集群的Hive3.1.2安装(有不少坑)
前置条件: 已经安装好了带有HDFS, MapReduce, Yarn 功能的 Hadoop集群 链接: ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布 ...
- Xshell远程连接kali,SSH服务拒绝了密码
在kali里面/etc/ssh/目录下,修改sshd_config文件,不是ssh_config,ssh_config是针对客户端的配置文件,而sshd_config是针对服务器端的配置文件. 找到# ...