遍历

面试之java集合

一笑奈何 提交于 2019-12-02 19:52:17
java集合 java集合分类:(普通集合、同步集合、并发集合) 普通集合 Connection接口 List 有序,可重复 ArrayList 优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程不安全,效率高 LinkedList 优点: 底层数据结构是双向链表,查询慢,增删快。 缺点: 线程不安全,效率高 Vector 优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程安全,效率低 Set 无序,唯一 HashSet 底层数据结构是哈希表。(无序,唯一) 如何来保证元素唯一性? 1.依赖两个方法:hashCode()和equals() LinkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一) 1.由链表保证元素有序 2.由哈希表保证元素唯一 TreeSet 底层数据结构是红黑树。(唯一,有序) Map接口(key-value 的键值对,key 不允许重复,value 可重复,重复时会覆盖前一个key) Map中的key:无序的、不可重复的,value:无序的、可重复的 HashMap:无序的,效率高,但不是线程安全的,key和value都允许为null。 TreeMap:有序的,底层使用红黑树,保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序。 LinkedHashMap

LinkedHashMap和HashMap的比较使用

亡梦爱人 提交于 2019-12-02 19:17:18
由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下。 ? import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class TestLinkedHashMap { public static void main(String args[]) { System.out.println( "*************************LinkedHashMap*************" ); Map<Integer,String> map = new LinkedHashMap<Integer,String>(); map.put( 6 , "apple" ); map.put( 3 , "banana" ); map.put( 2 , "pear" ); for (Iterator it = map.keySet().iterator();it.hasNext();) { Object key = it.next(); System.out.println( key+ "=" + map.get(key)); } System.out.println( "************

hdu3068-最长回文-马拉车(Manacher)算法

烂漫一生 提交于 2019-12-02 18:48:11
http://acm.hdu.edu.cn/showproblem.php?pid=3068 脑子转个弯总算看懂马拉车算法了。记录一下思路和模板。 马拉车算法是在O(n)的时间内求出最大回文子串。 一、变量和定义 为了对奇偶回文串统一处理,每个字符之间都加上一个字符,加上一个不会出现在原字符串的, 如"abba"变成"#a#b#b#a#";"aba"变成"#a#b#a#";无论是奇偶原串都变成了奇数新串,接下来对新串处理。 在一次遍历字符的过程中,变量名及意义 i:表示当前遍历到哪一个下标的字符 p[idx]:表示下表为idx的字符的回文半径,包括自身 id:目前遍历过程中能延展到最右的回文的中心点 mx:目前遍历过程中能延展到最右的下标位置,姑且称之为探测的最远长度 j:以id为中心的关于i对称的字符,在id的左边,已经遍历过了,p[j]已经确定了的 二、为何要记录每个遍历字符的回文半径呢?利用已有的信息为后面的遍历铺垫,否则就和中心扩展一样是O(n 2 )复杂度 1."abcecbd"加上'#'后变成"#a#b#c#e#c#b#d#" 下标 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 内容 # a # b # c # e # c # b # d # p[i] 1 2 1 2 1 2 1 6 1 2 1 2 1 2 1 最长回文子串"#b#c#e#c#b

二叉树的建立和遍历

拜拜、爱过 提交于 2019-12-02 18:46:59
二叉树(Binary Tree)是n(n >= 0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两颗互不相交的,分别称为根节点的左子树和右子树的二叉树组成。 二叉嘛,也就是每个节点最多有两个分支。 图示: 二叉树具有五种基本形态: 1.空二叉树 2.只有一个根节点 3.根节点只有左子树 4.根节点只有右子树 5.根节点既有左子树又有右子树 特殊的二叉树: 1.斜树(只有左子树的称为左斜树,只有右子树的称为右斜树,两者统称为斜树) 2.满二叉树(所有的分支节点都存在左子树和右子树,并且所得树叶都在同一层上) 3.完全二叉树的特征: 1.叶子结点只能出现在最下两层 2.最下层的叶子一定集中在左部连续位置 3.倒数二层,若有叶子结点,一定都在右部连续位置 4.如果节点度为1(这里的度与离散数学中的度不一样,这里的度是指节点所拥有的子树数),则该节点只有左孩子,即不存在只有右子树的情况 5.同样节点数的二叉树,完全二叉树的深度最小 二叉树的性质: 性质1:在二叉树的第i层上至多有2^(i - 1)个节点(i >= 1) 性质2:深度为k的二叉树至多有2^k - 1个节点(k >= 1) 性质3:对任何一颗二叉树T,如果其终端节点数为n0,度为2的节点数为n2,则n0 = n2 + 1 性质4:具有n个节点的完全二叉树的深度为[log2n] + 1([

CAD关于图层显示图层操作(com接口网页版)

夙愿已清 提交于 2019-12-02 18:18:11
如下例子,得到层表,然后循环得到所有层表记录,并打开图层显示 例如代码 JS: function OpenAllLayer() { var database = mxOcx.GetDatabase(); //返回数据库中的层表对象 var spLayerTable = database.GetLayerTable(); //创建一个遍历层表中所有图层的遍历器 var spIter = spLayerTable.NewIterator(); //移动当前遍历器位置 for(;!spIter.Done();spIter.Step(true,true)) { //返回遍历器当前位置的记录 var spLayerRec = spIter.GetRecord(); var sName = spLayerRec.Name; var layerRec=spLayerTable.GetAt(sName,false); if(layerRec) { layerRec.IsOff = false; alert("成功显示图层"); } } } 来源: https://www.cnblogs.com/yzy0224/p/11757264.html

CAD关于图层锁定图层操作(com接口网页版)

空扰寡人 提交于 2019-12-02 18:18:00
锁定后的图层上的实体不能编辑,但可以选择,如果想也不能选择,设置控件InitSet属性值为:SelectLockLayer=N 下面演示,遍历所有图层表记录,并设置图层为锁定状态, 例如代码 JS: function LockeAllLayer() { //返回控件的数据库对象 var database = mxOcx.GetDatabase(); //返回数据库中的层表对象 var layerTable = database.GetLayerTable(); //创建一个遍历层表中所有图层的遍历器 var iter = layerTable.NewIterator(); for (; !iter.Done(); iter.Step()) { //返回遍历器当前位置的记录 var layerRec = iter.GetRecord(); layerRec.IsLocked = true; alert("成功锁定图层"); } } 来源: https://www.cnblogs.com/yzy0224/p/11757268.html

java基础-容器

巧了我就是萌 提交于 2019-12-02 18:00:26
容器是指对对象的容纳,java中主要有这几个容器:list(列表)、set(集合)、map(映射)。所有容器都无法保存基本数据类型,需要先把基本数据类型变为封装类,用容器保存封装结果。 一.List(列表) 1.ArrayList,线性表,容量大小可变的数组  <===>tArrayLisk() 2.LinkedList,链表,没有使用顺序存储机制,无法根据索引快速存取  <===>tLinkedList() 3.迭代器遍历LIst  <===>demo2() 1 public static void tArrayList(){ 2 /* 3 ArrayList的构造方法: 4 ArrayList a1=new ArrayList(); //构造一个空的线性表 5 ArrayList a1=new ArrayList(b); //根据已有类集构造线性表 6 ArrayList a1=new ArrayList(20); //构造指定初始容量的线性表 7 */ 8 ArrayList a1=new ArrayList(); 9 a1.add("a"); 10 a1.add("z"); 11 a1.add("x"); //add(value),插入元素 12 a1.remove(0); //remove(index),根据数组索引删除元素 13 a1.set(0,"z1"); /

redis的keys命令与scan命令

≡放荡痞女 提交于 2019-12-02 16:04:39
1 keys命令 可以使用正则查找匹配的结果。时间复杂度是O(N),N为redis中所有key的总数量。 该命令有致命的缺点: a. 没有limit,只能一次性获取所有符合条件的key。如果数据量很大的话,就会产生无穷无尽的输出。 b. keys命令是遍历算法,遍历全部的key,时间复杂度是O(N)。redis是单线程的,如果keys查询的时间过长,redis的其它操作会被阻塞较长时间,造成redis较长时间的卡顿。要避免在生产环境使用该命令。 命令格式:keys pattern 2 scan命令 命令格式:scan cursor match pattern count num redis2.8版本之后,可以使用scan命令进行正则匹配查找。与keys不同的是,scan命令不是一次性查找出所有满足条件的key。而是根据游标和遍历的字典槽数,使得每次查询都限制在一定范围内。 cursor = 0时表示开始查询,第一次查询。每次查询结果中都会返回一个cursor,作为下次查询的开始游标。当某次查询返回的cursor=0时,表示已全部查询完毕。 来源: https://www.cnblogs.com/mydesky2012/p/11733089.html

回溯,爆搜 刷题记录

故事扮演 提交于 2019-12-02 15:42:33
算法只会暴力 HDU 5952 Counting Cliques 一个图,求大小为s的完全图的个数 每个完全图都给遍历一次。。。d(u,c,x)为遍历到大小为c的完全图(此时该完全图上的点都存在数组x里),然后u是此时该完全图上的点里最大的那个点 这样是为了每个完全图都只遍历一次,因为一定是按照编号从小到大遍历的 每次考察u的所有直连的点(只有这些点有可能和上面的图形成完全图),然后判断这个点是不是可以和上面的图形成完全图 时间复杂度就是所有大小为s的完全图的个数*20,其中可以优化的地方就是后面那个20了。。。但是我又懒又傻所以过了就行了。。。 代码: 1 #include <bits/stdc++.h> 2 #define nmax 110 3 4 using namespace std; 5 int cas,n,M,s,ans; 6 vector <int> g[nmax]; 7 int m[nmax][nmax]={0}; 8 9 inline void init(){ 10 memset(m,0,sizeof(m)); 11 for (int i=0; i<=n; i++) g[i].clear(); 12 ans=0; 13 } 14 15 inline void dfs(int u,int c,int* x){ //当前遍历了c个,其中最大的是u 16 if(c==s