arraylist

剑指offer4-解决面试题的思路

断了今生、忘了曾经 提交于 2020-02-11 14:10:51
4.2 画图 题目-二叉树的镜像 操作给定的二叉树,将其变换为源二叉树的镜像。 思路 求二叉树镜像的过程:1)交换根结点的左右子树;2)交换值为10的结点的左右子结点;3)交换值为6的结点的左右子结点。 总结这个过程就是:前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。 直到交换完所有非叶子结点的左右子结点。 解答 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public void Mirror(TreeNode root) { if((root==null) || (root.left==null && root.right==null)) return; //交换根结点的左右子树 TreeNode temp=root.left; root.left=root.right; root.right=temp; //交换原来根结点的左子结点的左右子结点 if(root.left!=null) Mirror(root.left); //交换原来根结点的右子结点的左右子结点 if(root

Java中多种集合类

旧城冷巷雨未停 提交于 2020-02-11 12:11:40
Java 中ArrayList和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快! 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口   Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java

剑指offer-二叉树中和为某一值的路径

十年热恋 提交于 2020-02-11 09:34:11
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 使用dfs 1 public class Solution {//dfs 树 my 2 ArrayList<ArrayList<Integer>> re ; 3 public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { 4 re = new ArrayList<>(); 5 if(root!=null){ 6 dfs(root,new ArrayList<Integer>(),target,0); 7 } 8 return re; 9 } 10 public void dfs(TreeNode root ,ArrayList<Integer> list,int target,int sum){ 11 if(root.left==null&&root.right==null){ 12 if((sum+root.val)==target){ 13 //添加路径 14 ArrayList l =new ArrayList<Integer>(list); 15 l.add(root.val)

Leetcode 239题 滑动窗口最大值(Sliding Window Maximum) Java语言求解

雨燕双飞 提交于 2020-02-11 08:29:17
题目链接 https://leetcode-cn.com/problems/sliding-window-maximum/ 题目内容 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置|最大值 -|- [1 3 -1] -3 5 3 6 7|3| 1 [3 -1 -3] 5 3 6 7|3| 1 3 [-1 -3 5] 3 6 7| 5| 1 3 -1 [-3 5 3] 6 7| 5| 1 3 -1 -3 [5 3 6] 7|6| 1 3 -1 -3 5 [3 6 7]|7| 分析 1、创建一个双端队列用来存储nums数组中元素的索引; 2、创建一个结果数组存储达到窗口大小时,在窗口内的元素; 3、没达到窗口大小时:如果双端队列是空的,那么直接从队尾插入元素的索引,如果双端队列不为空,需要保证双端队列中的索引在nums中的值是递减的。达到窗口大小时,直接将双端队列的头部元素在nums中的值存储到结果数组。 如图: 先放动态图: 再放静态图; 代码 import jdk.jshell.spi

模仿ArrayList和它的Iterator

℡╲_俬逩灬. 提交于 2020-02-10 05:34:33
package cn.yangwanhao.collection.list; import java.util.Iterator; import java.util.NoSuchElementException; /** * Title: MyArrayList类<br> * Description: 模仿ArrayList和Iterator * Company: 卓瀛工作室 * * @author 杨万浩 * @version 1.0 */ public class MyArrayList<E> implements Iterable<E> { /** * 初始化数组容量为10 */ private static final int DEFAULT_CAPACITY = 10; /** * 集合的长度 */ private int theSize; /** * 集合体 */ private E [] theItems; /** * 构造方法,初始化数组 */ public MyArrayList() { doClear(); } /** * 对外提供的初始化数组的方法 */ public void clear() { doClear(); } /** * 初始化数组的方法 */ private void doClear() { //把数组大小设为0 theSize = 0;

第7讲:Adapter 适配器模式

梦想与她 提交于 2020-02-10 04:43:20
2006.1.5 李建忠 适配(转换)的概念无处不在 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。 动机(Motivation) 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 意图(Intent) 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ——《设计模式》GoF 例说Adapter应用 这种实际上是一种委派的调用,本来是发送请求给MyStack,但是MyStack实际上是委派给list去处理。MyStack在这里其实就是Adapter(适配对象),list即是Adaptee(被适配的对象),而IStack就是客户期望的接口。 结构(Structure) 适配器有两种结构 -对象适配器(更常用) 对象适配器使用的是对象组合的方案,它的Adapter核Adaptee的关系是组合关系,即上面例子中MyStack和list是组合关系。 OO中优先使用组合模式,组合模式不适用再考虑继承。因为组合模式更加松耦合,而继承是紧耦合的,父类的任何改动都要导致子类的改动。 上面的例子就是对象适配器。 -类适配器

Java集合List、Set、Map讲解

只愿长相守 提交于 2020-02-09 18:50:01
概述    List、Set接口都是继承于 Collection 主接口, 而Map为独立接口     1、List接口下有ArrayList、Vector、LinkedList实现类     2、Set接口下有HashSet、LinkedHashSet、TreeSet实现类     3、Map下有HashMap、LikedHashMap、Hashtable、TreeMap实现类 特点   Collection接口:     ——List接口 有序,可重复            ArrayList       优点: 底层数据结构是数组,查询快,增删慢       缺点: 线程不安全,效率高        LinkedList       优点: 底层数据结构是链表,查询慢,增删快       缺点: 线程不安全,效率高        Vector       优点: 底层数据结构是数组,查询快,增删慢       缺点: 线程安全,效率低     ——Set 无序,唯一        HashSet       底层数据结构是哈希表。(无序,唯一)       如何来保证元素唯一性?       答:依赖两个方法:hashCode()和equals()       LinkedHashSet       底层数据结构是链表和哈希表 (FIFO插入有序,且唯一)      

hbase thrift java util

ε祈祈猫儿з 提交于 2020-02-09 14:17:34
转载: https://github.com/ssw239/java-thrift-hbase-io/blob/master/HBaseThriftClient.java pom.xml <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-thrift</artifactId> <version>1.3.1</version> </dependency> ThriftUtil.java package hbase; import java.lang.Object; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.security.MessageDigest; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry;

Java关键字(一)——instanceof

孤街浪徒 提交于 2020-02-09 05:37:56
目录 1、obj 必须为引用类型,不能是基本类型 2、obj 为 null 3、obj 为 class 类的实例对象 4、obj 为 class 接口的实现类 5、obj 为 class 类的直接或间接子类 6、问题 7、深究原理 8、instanceof 的实现策略   instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: 1 boolean result = obj instanceof Class   其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。   注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。 回到顶部 1、obj 必须为引用类型,不能是基本类型 1 2 3 int i = 0 ; System.out.println(i instanceof Integer); //编译不通过 System.out.println(i instanceof Object); //编译不通过   instanceof 运算符只能用作对象的判断。 回到顶部 2、obj 为 null 1 System

Java关键字(一)——instanceof

雨燕双飞 提交于 2020-02-09 05:37:23
  instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为: boolean result = obj instanceof Class   其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。   注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。 1、obj 必须为引用类型,不能是基本类型 int i = 0; System.out.println(i instanceof Integer);//编译不通过 System.out.println(i instanceof Object);//编译不通过   instanceof 运算符只能用作对象的判断。 2、obj 为 null System.out.println(null instanceof Object);//false   关于 null 类型的描述在官方文档: https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.1 有一些介绍