<>1、集合框架(简介、Collection方法、迭代器)

Collection就是相当容器 特殊的方法有iterator;相当于抓娃娃机中的夹子,把容器的元素取出的工具

《面试题 一.集合的remove方法与迭代器的remove方法有什么区别?
1.在迭代器或者foreach 循环删除的时候容易出现什么常见的问题 (常见!!!)
会下标越界异常

2.在迭代器执行collection.remove方法要注意会出什么问题 util.concurrentModificationException
从本质上来说:并发问题; (抓娃娃机为例子)
代码:
package com.wxm; import java.util.ArrayList; import java.util.Collection;
import java.util.Iterator; /** * collection中特别的方法 * iterator迭代器 * * * *
集合的remove和迭代器的remove有什么区别 * @author wxm * */ public class CollectionDemo {
public static void main(String[] args) { Collection c= new ArrayList();
c.add(22); c.add(23); c.add(34); c.add(35); c.add(48); // //fore// for (Object
object : c) {4// System.out.println(object); // } //迭代器是集合的特有方法 it.next()下一个
Iterator it=c.iterator(); while(it.hasNext()) {
//System.out.println(it.next()); int num=(int) it.next(); if(num%2==0) {
System.out.println(num); //System.out.println(it.next()); } } } }

<>2、集合框架List(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证)

可以看到这类的容器是有下标,可以按照下标去取、删除…等等的方式去操作容器的元素
《面试题 二. 2.1arraylist与linkedlist的区别(增删改查方面,结构)
Arraylist 数组结构 增删慢,查询快 有连续下标 线程不同步 增长因子为1.5 10 Linkedlist 链表结构 增删快,查询慢 没有连续下标

``` package com.wxm; import java.util.ArrayList; import
java.util.Collection;import java.util.List;import java.util.ListIterator; /* *
list中的listIterator * * * */ public class ListDemo { public static void
main(String[] args) { List c= new ArrayList(); c.add(22); c.add(23); c.add(34);
c.add(35); c.add(48); ListIterator it=c.listIterator(); while(it.hasPrevious())
{// System.out.println(it.previous()); } System.out.println("---"); } }~ ```

2.2 arraylist与list区别
1.list的长度可变,数组长度固定
2.list可以存放各类的元素对象,而数组一声明,只能存放对应的类型 、
2.3arraylist如何调优(增长因子)
为啥list集合底层是数组结构,但数组长度又固定的,而list长度又 怎么变?(论证)~
package com.wxm; import java.lang.reflect.Field;import java.util.ArrayList;
/** * 面试题: * arraylist与array的区别 * 1.list长度可变,数组长度固定、
2.list可以存放各类元素对象,对象一旦声明类型,就不能便 * * arraylist如何调优 * 增长因子,来实现优化性能 * * @author wxm
* */ * public class ListDemo2 { * public static void main(String[] args) { *
ArrayList al=new ArrayList<>(); * for(int i=1;i<=80;i++) { * al.add(i); *
System.out.println(i+","); * getlength(al); * } * } * public static void
getlength(ArrayList al) { * try { * Field
f=al.getClass().getDeclaredField("elementData"); * f.setAccessible(true); *
Object obj=f.get(al); * Object [] elementData=(Object[]) obj; *
System.out.println("当前al容器的底层数组的长度:"+elementData.length); } catch (Exception e)
{ * e.printStackTrace(); * } * }}~

<>3、集合框架LinkedList

链表的数据结构 模拟队列以及堆栈 堆栈:先进后出 子弹夹 队列:先进先出 水管
package com.wxm; import java.util.Iterator;import java.util.LinkedList; /** *
面试题: * 通过linkedlist集合来制作一个堆栈结构的容器 * * * 模拟一个队列结构的容器 */ *public class
LinkedListDemo { public static void main(String[] args) { Duilie dl=new
Duilie(); dl.push("a"); dl.push("b"); dl.push("c"); dl.push("c"); dl.push("d");
dl.push("e"); dl.bianLi(); } } /* * 堆栈结构的容器 * */ class Duilie{ private
LinkedList ll=new LinkedList<>(); /* * 往堆栈容器添加元素 * * */ public void push
(Object obj) { ll.addLast(obj); } public Object pop() { return
ll.removeFirst(); } public void bianLi() {// for (int i = 0; i < ll.size();
i++) {// System.out.println(this.pop());// } Iterator it=ll.iterator();
while(it.hasNext()) { System.out.println(it.next()); } } }~

<>5、集合框架ArrayList中的重复元素去重及其底层原理

判断list 集合中元素是否相同,依据的是元素的equals方法~
字符串去重list中存储的是字符串,而string的equals方法就是比的字符串值 引用数据类型去重(同姓名同年龄视为同一个人)
思路~

1、对人进行描述,将数据封装进对象 2、将对象放入容器 3、去重 引用数据类型被调用了equals方法验证~
package com.wxm; import java.util.ArrayList; /** * * 对arrayList中的元素去重 1.元素为字符串
2.元素是自定义对象 * * * 需求: * 判定两个人是同一个人的依据; * 名字相同年龄相同 * @author wxm
*集合collection的contains在调用的时候底层调用容器元素对象的equals方法 * *之前元素对象是String
*元素对象是obj(person) */ public class ArrayListDemo { public static void
main(String[] args) { ArrayList al=new ArrayList<>();// al.add("wangting");//
al.add("zhuangyuan"); // al.add("xiang"); // al.add("runchen"); //
al.add("xiang"); System.out.println("无去重复"+al.size()); // ArrayList newal=
repeat(al); // System.out.println("去重复后"+newal.size()); al.add(new
Person("wangting5", 12)); al.add(new Person("wangting1", 12)); al.add(new
Person("wangting2", 12)); al.add(new Person("wangting3", 12)); al.add(new
Person("wangting1", 12)); System.out.println(al.size()); } /** * * ArrayList
怎么去重复 * * 思路: * 1.建立一个新容器, * 2。将老的容器遍历取出其中的元素 *
3.如果这个元素存在于新容器中,那么不再往新容器加入。如果不存在,就加 */ public static ArrayList repeat(ArrayList
al) { ArrayList newAl =new ArrayList<>(); for(Object obj:al) {
if(!newAl.contains(obj)) { newAl.add(obj); } } return newAl; } } cclass Person{
private String name; private int age; public String getName() { return name; }
public void setName(String name) { this.name = name; } public int getAge() {
return age; } public void setAge(int age) { this.age = age; } @Override public
String toString() { return "Person [name=" + name + ", age=" + age + "]"; }
public Person(String name, int age) { super(); this.name = name; this.age =
age; } public Person() { super(); } @Override public boolean equals(Object obj)
{ Person p=(Person) obj; System.out.println(p.name+"--equals--"+this.name);
return p.name.equals(this.name) && p.age==this.age; }}~

技术
©2019-2020 Toolsou All rights reserved,
STM32的内部温度传感器实验总结。JLink、STLink、DAPLink、CMSIS DAP使用区别Linux 常用的命令vue-loader+webpack项目配置《剑指offer刷题笔记》6、重建二叉树 【c++详细题解】pycharm中安装cv2失败,及其解决数据库基础-MySql8.0(第二篇)--DML和DQLpython模拟阴阳师抽卡CSS实现loading小动画二维哈希(矩阵哈希)