集合运算

元组 集合

心已入冬 提交于 2019-12-17 08:34:40
# 什么是元组: 元组就是一个不可变的列表# ======================================基本使用======================================# 1、用途: 用于存放多个值,当存放的多个值只有读的需求没有改的需求时用元组最合适# 2、定义方式:在()内用逗号分隔开多个任意类型的值t=(1,3.1,'aaa',(1,2,3),['a','b']) # t=tuple(...)# print(type(t))# res=tuple('hello')# res=tuple({'x':1,'y':2})# print(res)# 3、常用操作+内置的方法#优先掌握的操作:#1、按索引取值(正向取+反向取):只能取# t=('a','b',1)# t[0]=111#2、切片(顾头不顾尾,步长)# t=('h','e','l','l','o')# res=t[1:3]# print(res)# print(t)#3、长度# t=('h','e','l','l','o')# print(len(t))#4、成员运算in和not in# t=('h','e','l','l','o')# print('h' in t)#5、循环# t=('h','e','l','l','o')# for item in t:# print(item)#

面试3——java集合类总结(Map)

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-16 22:30:53
1.概述: Java 中的map集合使用键值对(key-value)来保持数据,其中值(value)可以重复,键(key)必须唯一,但最多只能有一个key为空,它的主要实现类有HashMap、HashTable、TreeMap、LinkedHashMap. Map集合方法摘要 map和collection的区别: map存储的是键值对形式的元素,键唯一,值可以重复 collection存储的是单列元素,子接口set元素唯一,子接口list元素可以重复 map集合的数据结构值针对键有效,跟值无关,collection集合的数据结构针对的是元素有效 map的遍历方式(4种) package Three; import java.util.*; public class Map_sort { public static void main(String[] args) { Map<String,String> map = new HashMap<String, String>(); map.put("a","@"); map.put("f","@"); map.put("n","@"); map.put("e","@"); map.put("q","@"); map.put("d","@"); map.put("l","@"); // 第一种遍历map的方法,通过加强for循环map

【集合系列】- 深入浅出分析HashMap

风格不统一 提交于 2019-12-16 22:30:37
一、摘要 在集合系列的第一章,咱们了解到,Map的实现类有HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties等等。 关于HashMap,一直都是一个非常热门的话题,只要你出去面试,我保证一定少不了它! 本文主要结合JDK1.7和JDK1.8的区别,就HashMap的数据结构和实现功能,进行深入探讨,废话也不多说了,直奔主题! 二、简介 在程序编程的时候,HashMap是一个使用非常频繁的容器类,它允许键值都放入null元素。除该类方法未实现同步外,其余跟Hashtable大致相同,但跟TreeMap不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间迭代同一个HashMap的顺序可能会不同。 HashMap容器,实质还是一个哈希数组结构,但是在元素插入的时候,存在发生hash冲突的可能性; 对于发生Hash冲突的情况,冲突有两种实现方式, 一种开放地址方式(当发生hash冲突时,就继续以此继续寻找,直到找到没有冲突的hash值),另一种是拉链方式(将冲突的元素放入链表) 。 Java HashMap采用的就是第二种方式,拉链法。 在jdk1.7中,HashMap主要是由数组+链表组成,当发生hash冲突的时候

状态压缩dp相关

独自空忆成欢 提交于 2019-12-16 22:01:59
状态压缩dp 状态压缩是设计dp状态的一种方式。 当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总 量很少是,可以将多维状态压缩为一维来记录。 这种题目最明显的特征就是: 都存在某一给定信息的范围非常小(在20 以内),而我们在dp中所谓压缩的就是这一信息。 (或者是在做题过程中分析出了某一信息种类数很少) 我们来看个例子 经典题 给出一个n*m的棋盘,要放上一些棋子,要求不能有任意两个棋子相邻。 求方案数。 n<=100; m<=8。 设 \(dp[i][s]\) 表示第i行的状态 s是这一行棋子的排列压缩而成的二进制数,1表示有棋子,0表示没有棋子; 转移: \(dp[i][s]=\sum_{s'}dp[i-1][s']|s\& s'=0\) 我们发现这个m是非常小的,这样就可以启发我们对每一行2^m状态压缩。 设dp[i][S]表示到了第i行,第i行的状态是S的方案数是多少。 其中S的第j位为1,表示i这行第j位放了一个棋子。 状态转移: \(dp[i][S]=\sum_{S\&S'==0}{dp[i-1][ S' ]}\) 。 你会发现这样记录很暴力,状态数是与m相关的指数级的,但同时也就是因为m小我们就确实可以这么做。 这也正好映照了之前的: 其实本质就是很暴力的记录状态,只不过利用了题目本身的特殊条件(这一维很小),使得我们并不会因此复杂度过高。

Java集合框架常见面试题

给你一囗甜甜゛ 提交于 2019-12-16 14:56:15
点击关注 公众号 及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 剖析面试最常见问题之Java基础知识 说说List,Set,Map三者的区别? Arraylist 与 LinkedList 区别? 补充内容:RandomAccess接口 补充内容:双向链表和双向循环链表 ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢? 说一说 ArrayList 的扩容机制吧 HashMap 和 Hashtable 的区别 HashMap 和 HashSet区别 HashSet如何检查重复 HashMap的底层实现 JDK1.8之前 JDK1.8之后 HashMap 的长度为什么是2的幂次方 HashMap 多线程操作导致死循环问题 ConcurrentHashMap 和 Hashtable 的区别 ConcurrentHashMap线程安全的具体实现方式/底层具体实现 JDK1.7(上面有示意图) JDK1.8 (上面有示意图) comparable 和 Comparator的区别 Comparator定制排序 重写compareTo方法实现按年龄来排序 集合框架底层数据结构总结 Collection 1. List 2. Set Map 如何选用集合? 剖析面试最常见问题之Java基础知识

80道最新java基础部分面试题(六)

三世轮回 提交于 2019-12-16 11:39:04
59、ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector的功能,我们使用对比方式,更有利于说明问题)。 接着才说ArrayList与Vector的区别,这主要包括两个方面:. (1)同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。 备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的

python之Set操作(下)

好久不见. 提交于 2019-12-16 08:21:31
文章目录 python之Set操作(下) 5. Set删除 1) 删除一个指定元素 2) 随机删除一个元素 3) 清空Set 4) 删除整个Set 6. Set判断 1) 判断两个Set是否相等 2) 判断两个Set有没有交集 3) 判断一个Set是否包含另一个Set 4) 判断一个Set是否是另一个Set的子集 5) 判断元素是否在Set中 7. Set转换 1) Set转String 2) Set转Tuple 3) Set转List 8. Set运算 1) 并集 2) 交集 3) 差集 4) 补集 python之Set操作(下) 5. Set删除 Set删除元素,以下操作对象是可变集合(del关键字删除变量除外) 1) 删除一个指定元素 Set删除一个指定元素 推荐写法: 使用Python3的标准库,set类内置函数:discard(elem),elem指定要删除的元素 修改当前集合,删除一个指定元素 若要删除的元素不存在,则不执行任何操作 set1 = { "hello" , "world" , 2 , "python" } set1 . discard ( "python" ) print ( set1 ) # {'world', 'hello', 2} set1 . discard ( "java" ) print ( set1 ) # {'world', 'hello'

重写equal 的同时为什么必须重写hashcode?

本秂侑毒 提交于 2019-12-15 20:29:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> hashCode是编译器为不同对象产生的不同整数,根据equal方法的定义:如果两个对象是相等(equal)的,那么两个对象调用hashCode必须产生相同的整数结果,即:equal为true,hashCode必须为true,equal为false,hashCode也必须为false,所以必须重写hashCode来保证与equal同步。 class Student { int num; String name; Student(int num, String name) { this.num = num; this.name = name; } public int hashCode() { return num * name.hashCode(); } public boolean equals(Object o) { Student s = (Student) o; return num == s.num && name.equals(s.name); } public String toString() { return num + ":" + name; } } 在java的集合中,判断两个对象是否相等的规则是: 1,判断两个对象的hashCode是否相等 如果不相等,认为两个对象也不相等,完毕

80道最新java基础部分面试题(六)

大憨熊 提交于 2019-12-15 18:04:46
自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步! 59、ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector的功能,我们使用对比方式,更有利于说明问题)。 接着才说ArrayList与Vector的区别,这主要包括两个方面:. (1)同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。 备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的

第10章 字典

拟墨画扇 提交于 2019-12-15 07:56:48
字典的定义 有序字典是以有序集为基础的抽象数据类型 它支持以下运算: (1)Member(x,S),成员运算。 (2)Insert(x),插入运算:将元素x插入集合。 (3)Delete(x),删除运算:将元素x从当前集合中删去。 (4)Predecessor(x),前驱运算:返回集合中小于x的最大元素。 (5)Successor(x),后继运算:返回集合中大于x的最小元素。 (6)Range(x,y),区间查询运算:返回集合中界于x和y之间,即x≤z≤y的所有元素z组成的集合。 (7)Min(S),最小元运算:返回当前集合中依线性序最小的元素。 用二叉搜索树实现字典(二叉排序树) 对二叉排序树进行中序遍历可以得到一个递增的有序序列 在二叉搜索树T表示的字典中搜索元素x的运算实现 btlink BSSearch ( TreeItem x , BinaryTree T ) { btlink p = T - > root ; while ( p ) if ( x < p - > element ) p = p - > LeftChild ; else if ( x > p - > element ) p = p - > RightChild ; else break ; return p ; } //成员查询函数Member(x,T)只要返回BSSearch(x, T)搜索的结果