arraylist

Java连载86-List集合详解

天大地大妈咪最大 提交于 2020-02-21 02:58:22
一、List集合 1.List集合存储元素的特点: (1)有序(List集合中存储有下标)​:存进去是这样的顺序,取出来还是按照这个顺序取出​。 (2)可重复 2.深入ListJ集合 ArrayList集合底层是数组,数组​是有下标的;所以ArrayList集合有很多自己的特性​;ArrayList集合底层默认初始化容量是10,扩大之后的容量是原容量的1.5倍​;Vector集合底层默认初始化容量为10,扩大之后的容量是原容量的两倍 3.如何优化ArrayList和Vector 尽量减少扩容操作,因为扩容需要数组拷贝,数组拷贝是很耗内存的,一般推荐在创建集合的时候指定初始化容量 package com.bjpowernode.java_learning; import java.util.*; ​ public class D86_1_ListCollectionAnalysis { public static void main(String[] args) { //创建一个List集合 //Collection c = new ArrayList();//这样初始化一个列表编译没问题,但是我们就不用能用List特有的方法了 List l = new ArrayList(); //List l = new LinkedList();//这两种初始化方式哪种都可以

leetcode 40. Combination Sum II

点点圈 提交于 2020-02-20 13:22:58
题目内容 Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target. Each number in candidates may only be used once in the combination. Note: All numbers (including target) will be positive integers. The solution set must not contain duplicate combinations. Example: Input: candidates = [10,1,2,7,6,1,5], target = 8, A solution set is: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ] Example 2: Input: candidates = [2,5,2,1,2], target = 5, A solution set is: [ [1,2,2], [5] ] 分析过程 题目归类: 使用后删除类题目 题目分析

spring boot 2.0之后默认的连接池 HIkariCP介绍

£可爱£侵袭症+ 提交于 2020-02-20 10:59:24
  HIkariCP链接池比之传统的Tomcat JDBC datasource 、c3p0 datasource 等传统链接池优势太大,在获取链接释放链接,执行效率上面高出很多,这个产品的口号是“快速、简单、可靠”。 官网详细地说明了HikariCP所做的一些优化,总结如下: 字节码精简 :优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码; 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一; 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描; 自定义集合类型(ConcurrentBag:提高并发读写的效率; 其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究(但没说具体怎么优化) HikariCP为什么这么快   JDBC连接池的实现并不复杂,主要是对JDBC中几个核心对象Connection、Statement、PreparedStatement、CallableStatement以及ResultSet的封装与动态代理。接下来从几个方面来看看HikariCP为什么这么快:   优化并精简字节码  

ArrayList对象显示一致问题

一笑奈何 提交于 2020-02-19 19:16:10
最近编写一个程序,运到了一个bug。 遍历一个ArrayList数组时,发现里面的对象都是相同的值,可是自己明明存的不是一样的。找了半天错误,后面才想起来,ArrayList里面存的是具体的引用,搞了半天我存的都是同一个对象,解决办法就是每次存入对象进ArrayList时都new一个对象进去: for (String id : ids) { Picture picture = new Picture(); if ((Integer.parseInt(id) % 2) == 0) picture.setPid(Integer.parseInt(id)); else picture.setPid(Integer.parseInt(id)); System.out.println(Integer.parseInt(id)); objects.add(picture); } 这样就确保每次存入的引用值都不同了 来源: CSDN 作者: Jokeronee 链接: https://blog.csdn.net/Jokeronee/article/details/104396262

java面试题 -- 基础

醉酒当歌 提交于 2020-02-19 15:12:30
1.抽象和封装的不同点 抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。 2.重载和重写的区别 重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。 3.字符型常量和字符串常量的区别 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)字符常量只占一个字节 字符串常量占若干个字节(至少一个字符结束标志)4.成员变量与局部变量的区别有那些? 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰;从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存

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

▼魔方 西西 提交于 2020-02-19 07:13:52
题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路分析 递归遍历树, 把结点加入路径。若该结点是叶子结点且当前路径和等于期待和,则将此路径加入返回的lists中,否则退回父结点。在每一轮递归返回到父结点时,当前路径也要回溯一个结点值。 代码实现 public ArrayList < ArrayList < Integer > > FindPath ( TreeNode root , int target ) { ArrayList < ArrayList < Integer > > arrayLists = new ArrayList < > ( ) ; if ( root == null || root . val > target ) { return arrayLists ; } arrayLists = process ( root , target , arrayLists , new ArrayList < Integer > ( ) ) ; return arrayLists ; } public ArrayList < ArrayList < Integer > > process (

集合框架之ArrayList详解

久未见 提交于 2020-02-18 20:11:27
一. 简介 ArrayList即数组列表,是线程不安全的,底层采用数组(即Object[] elementData)实现了数据的存储,故其查询快,增删慢。 二. 扩容 源码解析 若未添加数据,则默认容量为0; 若通过add()方法添加数据后,默认的初始容量为10; 当数组满了,再新增数据时,会以1.5倍进行扩容(如:原容量为10,扩容后为15),再将原数组中的数据复制到新数组中。 1.7和1.8的区别 1.8之后采用了右移一位的位运算实现扩容,提高了效率。 三. 增删 增 在新增数据时,会先进行长度的校验,若长度不够,则先进行扩容,然后再往指定位置新增数据。 删 在删除数据时,无论删除多少数据都不会自动缩容。 四. ArrayList(int initialCapacity) 虽然执行ArrayList(int initialCapacity)能够初始化数组大小,但是List的大小不会改变。 示例 import java.util.ArrayList; class Solution { public static void main(String[] args) { ArrayList arrayList = new ArrayList(10); System.out.println(arrayList.size()); } } 运行结果: 0 五.

剑指offer算法题1

别等时光非礼了梦想. 提交于 2020-02-18 07:21:37
  一,在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。   利用题干给的条件:右边元素是比这个元素大,上边是的元素比这个元素小。于是,从左下角元素往上查找,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二维数组中不存在target元素。 public class Solution { public boolean Find(int target, int [][] array) { int rows = array.length;//该二维数组一共多少行 int cols = array[0].length;//一共多少列 int row = rows - 1; int col = 0; while(row>=0 && col <cols){ if(target > array[row][col]){ col++; }else if(target < array[row][col]){ row --; }else return true; } return false; } }    二,请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy

Java基础学生管理系统

穿精又带淫゛_ 提交于 2020-02-18 05:12:14
集 合 编程的时候如果要存储多个数据,使用固定长度数组不一定满足需求。 集合特点:提供一种存储空间可变的存储模型,存储的数据容量可变。 集合只能存储引用类型数据。 ArrayList<E>: 可调整大小的数组实现 <E>:是一种特殊的数据类型、泛型。 怎么用呢? 在E地方用引用数据类型替换即可 如:ArrayList<String>,ArrayList<Student> ArrayList构造方法和添加方法 方法名 说明 Public ArrayList() 创建一个空的集合对象 Public boolean add(E e) 将指定元素添加到集合末尾 Public void add(int index,E element) 在集合指定位置插入指定元素 import java.util.ArrayList; /** * @author murongkang * @date 2019-08-18 23:27 */ /*Public ArrayList() 创建一个空的集合对象 Public boolean add(E e) 将指定元素添加到集合末尾 Public void add(int index,E element) 在集合指定位置插入指定元素*/ public class ArrayListDemo { public static void main(String[]

集合——List

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-17 15:20:42
1.为什么使用集合 例如:存储数据 之前可以用数组存储数据,数组有很大的缺点,长度一旦确定,就没法修改,所以如果删除或者增加元素,需要大量的移动元素的位置。 数组:只能放一种数据类型,可以是基本数据类型也可以是引用数据类型 总行所述,可以使用集合来解决这种问题: 集合的优点: 增加删除元素效率高 集合的特点: 一个集合可以有多种数据类型(一般使用泛型,只存放一种数据类型),但是他只能存放引用数据类型 2. 集合的结构图 3.集合的应用场景 当需要将相同结构的个体整合到一起的时候,就考虑到用集合。 4.ArrayList ArrayList的使用 public class Test { public static void main ( String [ ] args ) { Collection collection = new ArrayList ( ) ; //接口new实现类 System . out . println ( "集合是否为空:" + collection . isEmpty ( ) ) ; //(1)添加元素 collection . add ( "hello" ) ; collection . add ( new Date ( ) ) ; collection . add ( 123 ) ; collection . add ( "hello" ) ;