arraylist

二叉树中和为某一值的路径

笑着哭i 提交于 2020-03-20 12:24:52
题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 题目详解 find(root.left,target,res,new ArrayList<>(path)); find(root.right,target,res,new ArrayList<>(path));    采用new ArrayList<>(path)是保证遍历完左节点后,将path变为之前的状态再去遍历右节点。 完整程序 import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { ArrayList <ArrayList<Integer>> res = new ArrayList<>(); if

异步编程RxJava-介绍

£可爱£侵袭症+ 提交于 2020-03-20 10:54:54
前言 前段时间写了一篇 对协程的一些理解 ,里面提到了不管是协程还是callback,本质上其实提供的是一种异步无阻塞的编程模式;并且介绍了java中对异步无阻赛这种编程模式的支持,主要提到了Future和CompletableFuture;之后有同学在下面留言提到了RxJava,刚好最近在看 微服务设计 这本书,里面提到了响应式扩展(Reactive extensions,Rx),而RxJava是Rx在JVM上的实现,所有打算对RxJava进一步了解。 RxJava简介 RxJava的官网地址: https://github.com/ReactiveX/RxJava , 其中对RxJava进行了一句话描述:RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. 大意就是:一个在Java VM上使用可观测的序列来组成异步的、基于事件的程序的库。 更详细的说明在Netflix技术博客的一篇文章中描述了RxJava的主要特点: 1.易于并发从而更好的利用服务器的能力。 2.易于有条件的异步执行。 3.一种更好的方式来避免回调地狱。 4

JAVA集合框架01

风流意气都作罢 提交于 2020-03-20 08:34:36
List 接口存储一组不唯一(可以重复),有序(插入顺序)的对象 01. ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高 通过看ArrayList的源码得知: /** * Constructs an empty list with an initial capacity of ten. 构造一个初始容量为十的空列表 */ public ArrayList() { this(10); 调用带参的构造 参数为10 } ArrayList创建的时候,数组初始化长度为10! List list=new ArrayList(-1); 这句话会运行错误! 看源码得知! /** * Constructs an empty list with the specified initial capacity. * * @param initialCapacity the initial capacity of the list * @exception IllegalArgumentException if the specified initial capacity * is negative */ public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) /

NO OO NO LIFE:OO第一单元总结

一笑奈何 提交于 2020-03-19 14:42:32
目录 第一次作业 第二次作业 第三次作业 总结 体会 第一次作业 作业分析 本次作业任务: 简单多项式导函数的求解 。 经历第一单元的 摧残 洗礼之后,再来看第一次作业的要求确实很水。由于表达式中只存在幂函数且每一项遵循 a*x**b 的格式,同时也不用考虑 WRONG FORMAT! 的情况,我们的工作就显得十分轻松了。 去除多余的空白符,并且整理多余的加减号。 使用 正则 解析表达式,并且创建实例化对象。 根据求导规则进行求导。 优化求导之后得到的表达式,输出。 其中对于输出表达式的优化策略主要包括以下: 处理系数1、-1,处理指数0、1。 合并同类项。 根据系数大小排序,保证正数在前。 UML图 本次作业,为保证后续的迭代工作,建立了Item抽象类,并设立了求导抽象方法。但是由于对后续迭代的情况考虑不周,第二次作业还是选择了 重构 。 度量分析 Method ev(G) iv(G) V(G) Item.checkItem(Item,ArrayList ) 4 5 6 Item.fervation() 1 1 1 Item.getCoef() 1 1 1 Item.getIndex() 1 1 1 Item.getItem(String,ArrayList ) 1 1 1 Item.setCoef(BigInteger) 1 1 1 Item.setIndex

ArrayList和LinkList的区别

∥☆過路亽.° 提交于 2020-03-19 13:25:30
题目描述 从上往下打印出二叉树的每个节点,同层节点从左到右打印。 例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7 解题思路 使用队列来进行 层次遍历 。 不需要使用两个队列分别存储当前层的节点和下一层的节点,因为在开始遍历一层的节点时,当前队列中的节点数就是当前层的节点数,只要控制遍历这么多节点数,就能保证这次遍历的都是当前层的节点。 ArrayList和LinkList的区别 底层实现区别 ArrayList 底层实现就是数组,且ArrayList实现了RandomAccess,表示它能快速随机访问存储的元素,通过下标 index 访问,只是我们需要用 get() 方法的形式, 数组支持随机访问, 查询速度快, 增删元素慢; LinkedList 底层实现是链表, LinkedList 没有实现 RandomAccess 接口,链表支持顺序访问, 查询速度慢, 增删元素快 ArrayList和LinkedList遍历的区别 List 实现RandomAccess使用的标记接口,用来表明支持快速(通常是固定时间)随机访问。这个接口的主要目的是允许一般的算法更改它们的行为,从而在随机或连续访问列表时提供更好的性能。 将操作随机访问列表(比如 ArrayList )的最好的算法应用到顺序访问列表(比如 LinkedList )时,会产生二次项行为

oo第一单元作业总结

非 Y 不嫁゛ 提交于 2020-03-18 17:18:41
oo第一单元作业总结 一、前言 第一单元作业主要内容为 表达式求导 ,其最终任务是一个支持简单幂函数和简单正余弦函数的导函数及其组合的求解问题。本文将从程序结构分析、bug分析、互测策略、对象创建模式等多个方面进行总结。 二、程序结构分析 第一次作业 总体架构: Main.java 中进行输入输出处理, Polynomial 管理项 Item 。 规模度量与风格探测: 主要问题在于 derivate 方法复杂度过高。 类耦合度分析: 第二次作业 总体架构: SineFunc 、 Const 、 CosineFunc 、 PowerFunc 、 XFunc 、 Function 均实现 Function 接口,其中定义了 derivate 和 toString 方法,所有基础函数因子由工厂模式 Factory 生成, Item 类内部使用 ArrayList 管理上述因子, Expression 类内部使用 ArrayList 管理Item项,底层逻辑整体结构为二维 ArrayList ,此外 FormatTest 和 InputProcessor 分别做输入格式判断与预处理,为交由工厂做准备。 规模度量与风格探测: 类耦合度分析: 第三次作业 总体架构: 底层逻辑沿用Task 2架构,不同的是将各类基础函数与加法乘法组合看做同一层,均实现 Item 接口。 规模度量与风格探测:

对象包装器和自动装箱

谁说我不能喝 提交于 2020-03-18 15:52:55
包装器(wrapper): 基本数据int有一个与之对应的类------Integer,通常,这样的类称之为包装器(wrapper) 如果有一个ArrayList<>,尖括号里是不允许使用基本数据类型的(即不可用写为ArrayList<int>),只可以写为ArrayList<Integer>     注意:ArrayList<Integer>的效率要远低于int[],但是前者的操作更方便,在构造较小的数组时可以使用前者 自动装箱(autoboxing): public static void main(String[] args) { ArrayList<Integer> l = new ArrayList<>(); //JDK7之后,右边的泛型声明可以省略 int i = 1; l.add(i); //等效于l.add(Integer.ValueOf(3)) } 来源: https://www.cnblogs.com/nothingAJ/p/6664917.html

Transfer a Two-Dimensional array to Two-Dimensional ArrayList?

谁说胖子不能爱 提交于 2020-03-18 12:52:06
问题 I have this piece of code: int[][] pattern = new int[][]{ { 1, 1, 1, 1, 1, 1, 1 }, { 1, 2, 0, 0, 0, 2, 1 }, { 1, 0, 3, 0, 3, 0, 1 }, { 1, 0, 0, 4, 0, 0, 1 }, { 1, 0, 3, 0, 3, 0, 1 }, { 1, 2, 0, 0, 0, 2, 1 }, { 1, 1, 1, 1, 1, 1, 1 }, }; I need to get this 2d array into a 2d ArrayList so i can manipulate it by adding rows and columns to move the pattern around. For example when my method calls for a shift of 2 rows and 2 columns i will be able to move the pattern to something like this: { 0, 0,

JDK8中的Bug

淺唱寂寞╮ 提交于 2020-03-18 00:46:10
在CopyOnWriteArrayList 和ArrayList 的构造函数中: public ArrayList(Collection<? extends E> c) { elementData = c.toArray(); size = elementData.length; // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); } public CopyOnWriteArrayList(Collection<? extends E> c) { Object[] elements = c.toArray(); // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elements.getClass() != Object[].class) elements = Arrays.copyOf(elements, elements.length, Object[].class); setArray

ArrayList的扩容方式和扩容时机

有些话、适合烂在心里 提交于 2020-03-17 19:08:22
初始化 ArrayList的底层是一个动态数组,ArrayList首先会对传进来的初始化参数initalCapacity进行判断 如果参数等于0,则将数组初始化为一个空数组, 如果不等于0,将数组初始化为一个容量为10的数组。 扩容时机 当数组的大小大于初始容量的时候(比如初始为10,当添加第11个元素的时候),就会进行扩容,新的容量为旧的容量的1.5倍。 扩容方式 扩容的时候,会以新的容量建一个原数组的拷贝,修改原数组,指向这个新数组,原数组被抛弃,会被GC回收。 //ArraList初始化容量判断 public void ensureCapacity(int minCapacity) { int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) ? 0 : DEFAULT_CAPACITY; if (minCapacity > minExpand) { ensureExplicitCapacity(minCapacity); } } //添加元素的方法 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } /